HERBERS Excel-Forum - das Archiv

Thema: Arbeitszeiten eintragen

Arbeitszeiten eintragen
matthias
Hallo allerseits,
ich bin neu hier und versuche gerade die Arbeitszeiten per Makro einzutragen.
Ich habe die Datei von einem Kollegen erhalten, blicke allerdings nicht so perfekt durch.
Vielleicht hat jemand "Lust" mich zu unterstützen, wenn ja,
danke im Voraus
https://www.herber.de/bbs/user/168711.xlsm
mfg matthias
AW: Arbeitszeiten eintragen
Onur
Unterstützen? Wobei denn genau?
Arbeitszeiten eintragen? WELCHE denn? Wieso per Makro? Die trägt man doch am Ende des Tages manuell ein.
AW: Arbeitszeiten eintragen
Holger
Hallo Matthias,

der Funktion des Kalender, wie bekommt man das hin, das ist ja mal richtig mega.

Gruß

Holger
AW: Arbeitszeiten eintragen
matthias
Hallo Holger,
habe deine Frage nicht verstanden ?
Die Experten im Forum haben das gemacht !!!

mfg matthias
Hallo Onur, ja aber...
matthias
Guten Tag Onur,
Du hast RECHT aber ich würde gern die SOLL Arbeitsstunden per Makro eintragen.
Das Makro läuft nicht so einwandfrei.
Die Anfang und Endzeiten stehen in Zeile 2.
Montags nichts
Dienstags 9h
Mittwochs nichts
Donnerstags 9h
Freitags 9h
Samstags 6h
Gesamt-Soll 33h

mfg matthias

AW: Hallo Onur, ja aber...
Alwin Weisangler
Hallo Matthias,

wo hast du denn diese Datei runtergeladen.
Die Datei ist defekt.
Ansonsten wäre für alle Monate nebst Feiertagen, die im Blatt "Feiertage" mit X gekennzeichnet sind ein möglicher Weg so:


Sub mw_Arbeitszeiten_eintragen()
Dim i&, j&, Feiertage$
With Tabelle13 ' Feiertage X erfassen
For i = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
If LCase(.Cells(i, 3)) = "x" Then
Feiertage = Feiertage & .Cells(i, 1) & "###"
End If
Next i
End With
For i = 1 To 12
With Sheets(i)
For j = 9 To 39
If WorksheetFunction.Weekday(CDate(.Cells(j, 3))) < 6 And InStr(1, Feiertage, .Cells(j, 3)) = 0 Then ' Mo-Fr ohne Feiertage
.Cells(j, 5) = Format(.Cells(2, 17), "##:##")
.Cells(j, 6) = Format(.Cells(2, 18), "##:##")
End If
If WorksheetFunction.Weekday(CDate(.Cells(j, 3))) = 6 And InStr(1, Feiertage, .Cells(j, 3)) = 0 Then ' Sa ohne Feiertge
.Cells(j, 5) = Format(.Cells(2, 17), "##:##")
.Cells(j, 6) = Format(.Cells(2, 19), "##:##")
End If
If InStr(1, Feiertage, .Cells(j, 3)) > 0 Then .Cells(j, 4) = "F"
Next j
End With
Next i
End Sub

Wichtig: Um es einfach zu halten, habe ich die Modulnamen sauber durchnummeriert. Tabelle1 =Januar bis Tabelle12 =Dezember (Februar bis April waren dafür verkehrt beziffert)
Also den Monat der richtigen Modulnummer des Tabellenblattes zuordnen.

Gruß Uwe

Habe ich gemacht...
matthias
Guten Abend Uwe,
danke für deine Unterstützung !
Ich habe die Tabellen mit den richtigen Nummern versehen.
Das Makro gestartet, leider Fehlermeldung:
Laufzeitfehler 13 Typen unverträglich.
bleibt hier stehen:
If WorksheetFunction.Weekday(CDate(.Cells(j, 3))) < 6 And InStr(1, Feiertage, .Cells(j, 3)) = 0 Then ' Mo-Fr ohne Feiertage


mfg matthias
AW: Habe ich gemacht...
Onur
"Ich habe die Tabellen mit den richtigen Nummern versehen. " Dann solltest du diese neue Datei auch posten, sonst kann man sie nicht testen.
Hier die geänderte Datei
matthias
Hallo zusammen,
hier das geänderte Muster.
https://www.herber.de/bbs/user/168715.xlsm
gruss matthias
AW: Hier die geänderte Datei
Onur
Läuft doch einwandfrei durch.
Hier Info...
matthias
Hallo Onur,
komisch bei mir hört das Makro nicht mehr auf zu laufen.
Sonntag werden Zahlen eingesetzt, bitte mal Hardkopie ansehen.
Userbild

gruss matthias
AW: Hier Info...
Onur
Wie genau hast du das Makro denn gestartet?
Hallo Onur
matthias
Hallo Onur,
ich habe das Makro mit dem Button: "Stunden eintragen"

mfg matthias
AW:
Eifeljoi 5
Hallo

Auch bei mir läuft das Makro zum Stunden eintragen durch, allerdings werden nur bei Januar die Stunden eingetragen.

Ganz am Rande:
Ich könnte mir vorstellen das dies auch ohne VBA lösbar sein könnte mit PQ.
AW:
Onur
WeekDay OHNE Returntype gibt Werte von 1 ((Sonntag) bis 7 (Samstag) aus.
DU brauchst aber von 1 (Montag) bis 7(Sonntag).
Also SO
WorksheetFunction.Weekday(CDate(.Cells(j, 3)),2) 


statt so:
WorksheetFunction.Weekday(CDate(.Cells(j, 3))) 
Habe Makro geändert
matthias
Hallo zusammen,
habe Makro etwas geändert, wegen Stundenzahl Anfang und Ende.
Das einzige Problem es wird Sonntags schon angefangen die Zeiten einzutragen.

Per Formel würde ich nicht machen, da die Stunden ja noch auf alle Monate eingetragen werden müssen.
Und weil man evtl. per Eingabe verändern kann.
Userbild

mfg matthias
AW: Habe Makro geändert
Onur
Habe dir schon um 20:12:30 geschrieben, was du ändern musst.
Entschuldigung Onur, habe übersehen, durch Fußball.
matthias
Habe geändert aber Feiertage
matthias
Hallo zusammen,
habe geändert aber die Feiertage werden nicht eingetragen und Berücksichtung,
da ja nicht gearbeitet wird.
Sub mw_Arbeitszeiten_eintragen()

Dim i&, j&, Feiertage$
With ActiveSheet ' Feiertage X erfassen
For i = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
If LCase(.Cells(i, 3)) = "x" Then
Feiertage = Feiertage & .Cells(i, 1) & "###"
End If
Next i
End With

For i = 1 To 12
With ActiveSheet 'Sheets(i)
For j = 9 To 39
If WorksheetFunction.Weekday(CDate(.Cells(j, 3)), 2) < 6 And InStr(1, Feiertage, .Cells(j, 3)) = 0 Then ' Mo-Fr ohne Feiertage
.Cells(j, 5) = Format(.Cells(2, 18), "##:##")
.Cells(j, 6) = Format(.Cells(2, 19), "##:##")
End If
If WorksheetFunction.Weekday(CDate(.Cells(j, 3)), 2) = 6 And InStr(1, Feiertage, .Cells(j, 3)) = 0 Then ' Sa ohne Feiertge
.Cells(j, 5) = Format(.Cells(2, 18), "##:##")
.Cells(j, 6) = Format(.Cells(2, 20), "##:##")
End If
If InStr(1, Feiertage, .Cells(j, 3)) > 0 Then .Cells(j, 4) = "F"
Next j
End With
Next i
End Sub



mfg matthias
AW: Habe geändert aber Feiertage
Onur
Blödsinn !
Der 1.1. ist ein MONTAG und wird NICHT eingetragen.
AW: Habe geändert aber Feiertage
matthias
Hallo Onur,
wenn aber, wie im Mai viele Feiertagen sind, muss doch ein f eingetragen werden.
Ich möchte ja das Makro noch für alle Monate durchlaufen lassen.

Gruß Matthias
AW: Habe geändert aber Feiertage
Onur
Hallo Onur Supi leider
matthias
Guten Abend Onur,
perfekt wenn Jahr 2024.
Wähle ich ein anderes Jahr aus z.B. 2023, bleibt Makro hier stehen:
             

If WorksheetFunction.Weekday(CDate(.Cells(j, 3)), 2) < 6 And InStr(1, Feiertage, .Cells(j, 3)) = 0 Then ' Mo-Fr ohne Feiertage

Laufzeitfehler 13
Typen unverträglich
mfg matthias
AW: Hallo Onur Supi leider
Onur
AW: Hallo Onur Supi leider
Alwin Weisangler
anbei eine neue Datei.
Einstellungen nur noch im Blatt "System" (Kalenderjahr ändern in B1).
Feiertage, Anfang und Ende eintragen via Button.
Es gibt keinen Monatsüberlauf mehr.
https://www.herber.de/bbs/user/168724.xlsm

Gruß Uwe
DANKE an ALLE, ich nehme die Datei von Onur. --
matthias
Guten Morgen,
danke an ALLE die geholfen und Ideen hatten für meine komplizierte Datei.

mfg matthias
AW: Hallo Onur Supi leider
Alwin Weisangler
Löschen der alten Werte fehlte noch:


Sub mw_Arbeitszeiten_eintragen()
Dim i&, j&, Feiertage$
With Tabelle13 ' Feiertage X erfassen
For i = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
If LCase(.Cells(i, 3)) = "x" Then
Feiertage = Feiertage & .Cells(i, 1) & "###"
End If
Next i
End With
For i = 1 To 12
With Sheets(i)
.Range("D9:F39").ClearContents
For j = 9 To 39
If .Cells(j, 2) = "" Then Exit For
If WorksheetFunction.Weekday(.Cells(j, 3), 2) < 6 And InStr(1, Feiertage, .Cells(j, 3)) = 0 Then ' Mo-Fr ohne Feiertage
.Cells(j, 5) = Format(Tabelle13.Cells(3, 7), "##:##")
.Cells(j, 6) = Format(Tabelle13.Cells(3, 8), "##:##")
End If
If WorksheetFunction.Weekday(.Cells(j, 3), 2) = 6 And InStr(1, Feiertage, .Cells(j, 3)) = 0 Then ' Sa ohne Feiertge
.Cells(j, 5) = Format(Tabelle13.Cells(3, 7), "##:##")
.Cells(j, 6) = Format(Tabelle13.Cells(3, 9), "##:##")
End If
If InStr(1, Feiertage, .Cells(j, 3)) > 0 Then .Cells(j, 4) = "F"
Next j
End With
Next i
End Sub


Gruß Uwe
AW: Hallo Onur Supi leider
schauan
Hallöchen,

in Deinem Kalender fehlen übrigens so etwa 3 Feiertage

- Frauentag (Berlin)
- Friedensfest (Augsburg)
- Kindertag (Thüringen)

siehe https://www.clever-excel-forum.de/Thread-Kalender-Ferien-und-Feiertage?pid=261702#pid261702
Und in Spalte ...
matthias
Hallo Uwe,
hatte vergessen, in Spalte E wird immer 0:30 geschrieben und in Spalte F 8:30.
Kein Samstag aber leider fängt die Reihe zum einsetzen ab Sonntags an.

mfg matthias
AW: Und in Spalte ...
Alwin Weisangler
Hallo miteinander,

ich habe euch eine ,2 unterschlagen - jetzt klingelts sicherlich.
richtig ist es so:


Sub mw_Arbeitszeiten_eintragen()
Dim i&, j&, Feiertage$
With Tabelle13 ' Feiertage X erfassen
For i = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
If LCase(.Cells(i, 3)) = "x" Then
Feiertage = Feiertage & .Cells(i, 1) & "###"
End If
Next i
End With
For i = 1 To 12
With Sheets(i)
For j = 9 To 39
If WorksheetFunction.Weekday(CDate(.Cells(j, 3)), 2) < 6 And InStr(1, Feiertage, .Cells(j, 3)) = 0 Then ' Mo-Fr ohne Feiertage
.Cells(j, 5) = Format(.Cells(2, 17), "##:##")
.Cells(j, 6) = Format(.Cells(2, 18), "##:##")
End If
If WorksheetFunction.Weekday(CDate(.Cells(j, 3)), 2) = 6 And InStr(1, Feiertage, .Cells(j, 3)) = 0 Then ' Sa ohne Feiertge
.Cells(j, 5) = Format(.Cells(2, 17), "##:##")
.Cells(j, 6) = Format(.Cells(2, 19), "##:##")
End If
If InStr(1, Feiertage, .Cells(j, 3)) > 0 Then .Cells(j, 4) = "F"
Next j
End With
Next i
End Sub

Aber die Datei bleibt trotzdem defekt, da die Schleife alle 12 Tabellenblätter durchläuft und in Spalte B auch brav das F für Feiertage erscheint nur eben in Spalte E und F bleiben die Zellen leer. Vermutlich im XML ist da was nicht mehr so, wie es sein soll.

Gruß Uwe