Office: (Office 365) Stundenzettel, VBA, MoveNext funktioniert nicht

Helfe beim Thema Stundenzettel, VBA, MoveNext funktioniert nicht in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo, ich habe folgendes Problem und bin um jeden Denkanstoß sehr dankbar! Tabelle tblLOG: Daten einer Stechuhr; Datum, Uhrzeit, Mitarbeiter Tabelle... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von liselotte6790, 25. Oktober 2022.

  1. Stundenzettel, VBA, MoveNext funktioniert nicht


    Hallo,

    ich habe folgendes Problem und bin um jeden Denkanstoß sehr dankbar!

    Tabelle tblLOG: Daten einer Stechuhr; Datum, Uhrzeit, Mitarbeiter
    Tabelle tblKalender: alle Kalendertage bis zum Jahr 2100 (Datum, Monatsname, Tag,...)
    Tabelle tblStundenzettel

    Nun gibt es das Formular frmStundenzettel, welches auf einer Abfrage qryStundenzettelFINAL der Tabelle tblLOG basiert (Datum, UhrzeitStart, UhrzeitEnde, Dauer, Pause, Mitarbeiternummer).
    Im Formular frmStundenzettel kann ich den Monat und das Jahr auswählen. Anschließend wähle ich den Mitarbeiter, für welchen ich den Stundenzettel erstellen möchte.

    Über einen Button "Stundenzettel erstellen" werden über eine Anfügeabfrage alle Kalendertage des ausgewählten Monats und Jahrs in die Tabelle tblStundenzettel übertragen.
    Danach füge ich für all diese Kalendertage die entsprechend ausgewählte Mitarbeiternummer ein:
    Code:
    Private Sub cmdStundenzettelerstellen_Click()
    
        Dim stDocName As String
    
        If Me!txtPerso <> "" Then
        stDocName = "qryKalenderEintragen"
        DoCmd.OpenQuery stDocName, acNormal, acEdit ' Kalenderdaten in tblStundenzettel eintragen
    
        Dim dbs As DAO.Database
        Dim rs1 As DAO.Recordset
        Dim rs2 As DAO.Recordset
        Set dbs = CurrentDb
        Dim qdf As DAO.QueryDef
     
        Dim strStart As String
        Dim strpersonr As String
        Dim personr As String
        Dim strJahr As String
        Dim strMonat As String
        Dim strZeiten As String
        Dim txtStart As String
     
    
        'Personalnummer in Stundenzettel einfuegen
    
        strpersonr = "SELECT * FROM tblStundenzettel WHERE stdzettel_personalnr is null  ORDER BY stdzettel_datum"
        Set rs1 = dbs.OpenRecordset(strpersonr, dbOpenDynaset)
     
        personr = Me!txtPerso
     
        Do Until rs1.EOF
        rs1.Edit
        rs1!stdzettel_personalnr = personr
        rs1.Update
        rs1.MoveNext
        Loop
    Bis hier hin funktioniert alles einwandfrei.

    Nun möchte ich, dass alle Datensätze, die in der Tabelle tblStundenzettel STARTZEIT = NULL mit den Daten aus der Abfrage qryStundenzettelFINAL gefüllt werden.
    (Da nicht an allen Tagen abgestempelt wird, aber ich alle Tage auf dem Stundenzettel aufgeführt haben möchte. An Tagen, an denen es keine Stempelung gibt, setzt er Frei auf True).
    Es wird nun lediglich der erste Datensatz korrekt übertragen. Nachdem ich die Datensätze im Direktbereich habe "drucken" lassen, sehe ich, dass er immer am ersten Datum hängt in der Abfrage qryStundenzettelFINAL. HIer funktionert wohl das MoveNext vom rs2 nicht.

    Hier der Code:

    Code:
    'Start in Stundenzettel einfuegen
    
        strStart = "SELECT * FROM qryStundenzettelFINAL"
        Set rs2 = dbs.OpenRecordset(strStart, dbOpenDynaset)
     
        strZeiten = "SELECT * FROM tblStundenzettel WHERE stdzettel_Start is null ORDER BY stdzettel_datum"
        Set rs1 = dbs.OpenRecordset(strZeiten, dbOpenDynaset)
     
        Do Until rs1.EOF
        rs1.Edit
        Debug.Print rs1!stdzettel_datum & " Datum Sundenzettel"
        Debug.Print Format(rs2!Datum, "dd.MM.yyyy")
        If Format(rs1!stdzettel_datum, "dd.MM.yyyy") = Format(rs2!Datum, "dd.MM.yyyy") Then
        rs1!stdzettel_Start = rs2!minvonstart
        rs1!stdzettel_Ende = rs2!MaxvonEnde
        rs1!stdzettel_dauer = rs2!Dauerberein
        rs1!stdzettel_pause = rs2!Pauseberein
        rs1.Update
        rs1.MoveNext
        rs2.MoveNext
        Else
        rs1.Edit
        rs1!stdzettel_frei = True
        rs1.Update
        rs1.MoveNext
        End If
        Loop
    
        rs1.Close
        rs2.Close
        dbs.Close
    
    
        MsgBox ("Stundenzettel wurde erstellt")
    
        Else
        MsgBox "Bitte wählen Sie zuerst einen Mitarbeiter"
        End If
        ' Form.Requery
     
    
     
    End Sub
    Vorab vielen lieben Dank für eure Hilfe!
     
    liselotte6790, 25. Oktober 2022
    #1
  2. andyfau
    andyfau Erfahrener User
    Hallo Liselotte,

    Recordsets werden beim set = .... nicht unbedingt automatisch auf den ersten Satz positioniert, sodass man beim sequentiellen Lesen zuerst einen rs.MoveFirst machen sollte.
     
    andyfau, 26. Oktober 2022
    #2
  3. JHC
    jhc Neuer User
    Hallo Liselotte,
    vielleicht geht es so. Ungetestet!
    Dabei setzt du voraus, das immer die gleiche Anzahl von Datensätzen in den Recordsets vorhanden sind.
    und die auch in der von dir gewollten Reihenfolge stehen.

    Code:
    'Start in Stundenzettel einfuegen
    
        strStart = "SELECT * FROM qryStundenzettelFINAL"
        Set rs2 = dbs.OpenRecordset(strStart, dbOpenDynaset)
     
        strZeiten = "SELECT * FROM tblStundenzettel WHERE stdzettel_Start is null ORDER BY stdzettel_datum"
        Set rs1 = dbs.OpenRecordset(strZeiten, dbOpenDynaset)
        
        ' Da muss erstmal geprüft werden, ob die gleiche Anzahl
        ' von Datensätzen in beiden Recordsets vorhanden ist
        ' rs1.moveLast
        ' rs1.recordcount
        ' oder ob überhaupt Datensätze vorhanden sind 
        ' rs1.EOF
    
        'zum 1.Datensatz
        rs1.MoveFirst
        rs2.MoveFirst
        Do Until rs1.EOF
            Debug.Print rs1!stdzettel_datum & " Datum Stundenzettel"
            Debug.Print Format(rs2!Datum, "dd.MM.yyyy")
            If Format(rs1!stdzettel_datum, "dd.MM.yyyy") = Format(rs2!Datum, "dd.MM.yyyy") Then
                rs1.Edit
                rs1!stdzettel_Start = rs2!minvonstart
                rs1!stdzettel_Ende = rs2!MaxvonEnde
                rs1!stdzettel_dauer = rs2!Dauerberein
                rs1!stdzettel_pause = rs2!Pauseberein
                rs1.Update
            Else
                rs1.Edit
                rs1!stdzettel_frei = True
                rs1.Update
                
            End If
            rs1.MoveNext
            rs2.MoveNext
        Loop
        
        rs1.Close
        rs2.Close
        dbs.Close
     
  4. Stundenzettel, VBA, MoveNext funktioniert nicht

    Hallo jhc,

    vielen Dank für deine Antwort!

    Die Anzahl der Recordsets unterscheiden sich natürlich. Da die Mitarbeiter nicht an allen Tagen arbeiten, führt die Tabelle tblLOG weniger Datensätze als die tblStundenzettel.
    Wenn ich deine Befehle
    ' rs1.moveLast
    ' rs1.recordcount
    ' rs1.EOF
    in den Code einfüge, dann kommt die Meldung "Fehler beim Kompilieren: Unzulässige Verwendung einer Eigenschaft

    Trotzdem Danke! :)
     
    liselotte6790, 27. Oktober 2022
    #4
  5. andyfau
    andyfau Erfahrener User
    Hallo Liselotte,
    rs1.moveLast ist eine Methode. Dürfte also allein stehend keinen Kompilierungsfehler auslösen.
    rs1.recordcount ist eine Eigenschaft. Bezeichnet die Anzahl der Datensätze des Recordsets. Muss also einer Zahlenvariable, vorzugsweise vom Typ LongInteger, zugewiesen werden.
    Code:
    Dim anzsaetze as long
    anzsaetze = rs1.recordcount
    
    rs1.EOF ist eine Eigenschaft, die bei Dateiende den boolschen Wert True erhält.
    Also Abfrage auf Dateiende:
    Code:
    If rs1.EOF then....
    
    If Not rs1EOF then ....
     
    andyfau, 27. Oktober 2022
    #5
Thema:

Stundenzettel, VBA, MoveNext funktioniert nicht

Die Seite wird geladen...
  1. Stundenzettel, VBA, MoveNext funktioniert nicht - Similar Threads - Stundenzettel VBA MoveNext

  2. Zusätzliche Bedingung mit WennFalsch(Wenn(Oder Funktion

    in Microsoft Excel Hilfe
    Zusätzliche Bedingung mit WennFalsch(Wenn(Oder Funktion: Hallo liebe Office Gemeinde, ich bräuchte mal eure Hilfe, mit dem allmächtigen Google bin ich nicht weitergekommen: Ich habe von meinem Vorgänger eine wunderbare Excel Stundenzettel Vorlage...
  3. Stundenzettel - Nachtzuschläge Aufteilen

    in Microsoft Excel Hilfe
    Stundenzettel - Nachtzuschläge Aufteilen: Hallo Zusammen, ich bin neu im Forum und benötige etwas Unterstützung bei der Erstellung eines Stundenzettels. Ich habe das Ziel, dass ich aus meiner eingegebenen Nettoarbeitszeit die Feiertags-...
  4. Komplexer Stundenzettel

    in Microsoft Excel Hilfe
    Komplexer Stundenzettel: Hallo, ich habe Schwierigkeiten, die Formeln eines Stundenzettels auf den aktuellen Stand zu bringen. Vielleicht kann mich jemand dabei unterstützen. Die Datei ist im Anhang. Zum Problem:...
  5. Formeleingabe Stundenzettel

    in Microsoft Excel Hilfe
    Formeleingabe Stundenzettel: Hallo, bin nur mäßiger Nutzer von Excel und hätte da mal ne Frage zur Erstellung meines Stundennachweises, vieleicht kann mir ja jemand helfen... Ich möchte in Sp A nur die Schichtnummer eingeben...
  6. auf Stundenzettel in H37 =WENN(F37<6;6-F37;"")

    in Microsoft Excel Hilfe
    auf Stundenzettel in H37 =WENN(F37<6;6-F37;""): huhu, ich brauche hilfe. geht das, dass er die Rechnung erst macht, wenn in F37 etwas anderes als null steht? zur erklärung: in F37 steht die Summe der Arbeitsstunden (6 Std. am Tag)...
  7. Stundenzettel - Zeitberechnung

    in Microsoft Excel Hilfe
    Stundenzettel - Zeitberechnung: Hallo - ich mal wieder ;(( Hab da mal anliegend meinen Stundenzettel beigetan. Ich bräuchte die Zahlen so ähnlich wie bereits eingetragen also: Uhrzeit - Uhrzeit = Stunden (Dezimal)...
  8. Stundenzettel

    in Microsoft Word Hilfe
    Stundenzettel: Moin habe einen Stundenzettel mit Word Office 2007 erstellt, meine Frage dazu kann Mann irgendwie alles feststellen wie z.b siehe Anhang oben Wochentag / Datum das wenn ich was reinschreibe...
Schlagworte:
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden