Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Stundeneingabe für Arbeitszeitprogramm
#11
Hallöchen,

hier ist nun der korrigierte Code, nochmal alle 3 Makros zusammen.

Die Daten werden geholt. Eintragungen sind damit nur im aktuellen Monat ab dem aktuellen Tag möglich. In der Vergangenheit oder weiter in der Zukunft als im aktuellen Monat sind keine Eintragungen möglich.
Die Daten werden auch nur dann übertragen, wenn der aktuelle Monat eingestellt ist.

Hinweise:
1. Wenn der Monat in A9 gewechselt wird, würde ich den Eingabebereich leeren. Ansonsten hast Du im Eingabebereich Daten von einem anderen Monat, als Du gerade gewählt hast.
2. In Zusammenhang mit 1. musst Du aufpassen, dass Du bei Monatswechsel nicht Daten des vorher eingestellten Monats überträgst. Man könnte z.B. zusätzlich eine Variable setzen, dass eine Übertragung erst möglich ist, wenn zuvor Daten geholt wurden. (zusätzlicher Hinweis : Eine Einschränkung auf den aktuellen Monat ist schon im Code drin).
3. Daten vom aktuellen Tag bis zum Monatsende können wild geändert werden ...
4. Ich gehe hier von Deiner Angabe im Post vom 15.02.2016, 18:35 aus, dass alle Daten in der Mitarbeiterdatei untereinander stehen. Im Post vom 17.02.2016, 09:05 hast Du was von Tabellenblättern JAN, FEB usw. geschrieben. Da solltest Du Dich besser für eine Variante entscheiden.
5. In den Codes hab ich die Mitarbeiterdateien als xlsx. Wenn Du nur xls hast, bitte ändern.
6. Eventuell muss in Spalte F in beiden Dateien noch eine Formel gesetzt werden oder etwas anders verfahren werden, damit die Zeit berechnet wird. Ich hole und sende nur die Werte über den kompletten Bereich, dadurch werden Formeln überschrieben.

Code:
Sub Marco1()
'Makro zur Datenuebernahme. Voraussetzung: Start vom Blatt Start aus
    'Blattschutz aufheben
    ActiveSheet.Unprotect Password:="BlaBla"
    'Bereich leeren
    Range("D3:L33").ClearContents
    'Daten aus Mitarbeiterdatei kopieren, Blattname ggf. anpassen
    With Workbooks(Mitarbeiter & " Stundenabrechnung2016.xlsx").Sheets("Tabelle1")
      .Range(.Cells(DateDiff("d", "01.01." & Year(Now), Cells(3, 3)) + 1, 4), _
             .Cells(DateDiff("d", "01.01." & Year(Now), "01." & Month(Cells(3, 3)) + 1 & "." & Year(Cells(3, 3))), 12)).Copy
    End With
    'Im Eingabebereich des aktiven Blattes einfuegen
    Range("D3").PasteSpecial Paste:=xlValues
    'Eingabebereich sicherheitshalber auf gesperrt setzen
    Range("D3:L33").Locked = True
    'Wenn der monat aktuell ist, dann
    If Month(Now) = Month(Cells(3, 3).Value) Then
      'Zellen gesperrt setzen bis vor den aktuellen Tag
      Range(Cells(2, 3), Cells(2 + Day(Now) - 1, 12)).Locked = False
      'Zellen frei setzen ab dem aktuellen Tag
      Range(Cells(2 + Day(Now), 3), Cells(33 + Day(Now), 12)).Locked = True
    'Ende Wenn der monat aktuell ist, dann
    End If
    'Blattschutz setzen
    ActiveSheet.Protect Password:="BlaBla"
End Sub

Sub Marco2()
'Makro zum Daten senden. Voraussetzung: Start vom Blatt Start aus
    'Wenn der Monat aktuell ist, dann
    If Month(Now) = Month(Cells(3, 3).Value) Then
      'Im Eingabebereich des aktiven Blattes einfuegen
      Range("D3:L" & (DateDiff("d", "01.01." & Year(Now), "01." & Month(Now) & "." & Year(Now)) + 3)).Copy
      'Daten aus Mitarbeiterdatei kopieren, Blattname ggf. anpassen
      With Workbooks(Mitarbeiter & " Stundenabrechnung2016.xlsx").Sheets("Tabelle1")
        .Cells(DateDiff("d", "01.01." & Year(Now), "01." & Month(Now) & "." & Year(Now)) + 1, 4).PasteSpecial Paste:=xlValues
      End With
    Else
      MsgBox "Daten werden nicht übertragen, Monat nicht aktuell!"
    End If
End Sub

Private Function Mitarbeiter() As String
'Funktion zum "Drehen" Name, Vornahme in Vorname Name
'Mit dem Blatt Mitarbeiter
With Sheets("Mitarbeiter")
'Mitarbeiter aus Zeile x ermitteln anhand Wert x aus mit Auswahlfeld verlinkter Zelle C1
'und Entfernen ueberfluessiger Leerzeichen
Mitarbeiter = Trim(Right(.Cells(.Cells(1, 3), 1), Len(.Cells(.Cells(1, 3), 1)) - InStr(1, .Cells(.Cells(1, 3), 1), ","))) & " " & _
       Trim(Left(.Cells(.Cells(1, 3), 1), InStr(1, .Cells(.Cells(1, 3), 1), ",") - 1))
'Ende Mit dem Blatt Mitarbeiter
End With
End Function

Schaue mal, ob es so passt und melde Dich,
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#12

.xlsm   Stempeluhr.xlsm (Größe: 205,46 KB / Downloads: 10)
.xls   Ilse Raterink Stundenabrechnung2016.xls (Größe: 1,82 MB / Downloads: 7)
Hallo ,
habe jetzt mal angepasst. Und siehe da....   Habe das mal Makro4 genannt..   Alles was unterstrichen ist "hakt" und weiss nicht wo.

Werde Dir jetzt mal beide Mappe hochladen. Ich denke, dann wirds klarer.

Sub Marco4()
'Makro zur Datenuebernahme. Voraussetzung: Start vom Blatt Start aus
    'Blattschutz aufheben
    ActiveSheet.Unprotect Password:="BlaBla"
    'Bereich leeren
    Range("D8:M38").ClearContents
    'Daten aus Mitarbeiterdatei kopieren, Blattname ggf. anpassen
    Workbooks(Mitarbeiter & " Stundenabrechnung2016.xls").Sheets("Jan").Range(Cells(DateDiff("d", "01.01." & Year(Now), Now) + 1, 4), _
             Cells(DateDiff("d", "01.01." & Year(Now), "01." & Month(Now) & "." & Year(Now)), 12)).Copy
    'Im Eingabebereich des aktiven Blattes einfuegen
    Range("D8:M38").PasteSpecial Paste:=xlValues
    'Wenn der Monat aktuell ist, dann
    If Month(Now) = Month(Cells(3, 3).Value) Then
      'Zellen gesperrt setzen bis vor den aktuellen Tag
      Range(Cells(2, 3), Cells(2 + Day(Now) - 1, 12)).Locked = False
      'Zellen frei setzen ab dem aktuellen Tag
      Range(Cells(2 + Day(Now), 3), Cells(33 + Day(Now), 12)).Locked = True
    'Ende Wenn der monat aktuell ist, dann
    End If
    'Blattschutz setzen
    ActiveSheet.Protect Password:="BlaBla"
End Sub

Private Function Mitarbeiter() As String
'Funktion zum "Drehen" Name, Vornahme in Vorname Name
'Mit dem Blatt Mitarbeiter
With Sheets("Mitarbeiter")
'Mitarbeiter aus Zeile x ermitteln anhand Wert x aus mit Auswahlfeld verlinkter Zelle C1
'und Entfernen ueberfluessiger Leerzeichen
Mitarbeiter = Trim(Right(.Cells(.Cells(1, 3), 1), Len(.Cells(.Cells(1, 3), 1)) - InStr(1, .Cells(.Cell
Antworten Top
#13
Hallöchen,

DU musst den letzten Code nehmen. Ich habe ihn hie nochmal angepasst und korrigiert, da ja die Daten jetzt an etwas anderer Stelle stehen. Beim Rückschreiben muss dann auch etwas weiter unten kopiert werden.
Den Blattnamen "Jan" solltest Du auch flexibel aus der Angabe von C8 holen, z.B. so: Format(Cells(8, 3), "mmm")


Code:
Sub Marco4()
'Makro zur Datenuebernahme. Voraussetzung: Start vom Blatt Start aus
    'Blattschutz aufheben
    ActiveSheet.Unprotect Password:="BlaBla"
    'Bereich leeren
    Range("D8:L38").ClearContents
    'Daten aus Mitarbeiterdatei kopieren, Blattname ggf. anpassen
    With Workbooks(Mitarbeiter & " Stundenabrechnung2016.xls").Sheets("Jan")
      .Range(.Cells(DateDiff("d", "01.01." & Year(Now), Cells(8, 3)) + 1, 4), _
             .Cells(DateDiff("d", "01.01." & Year(Now), "01." & Month(Cells(8, 3)) + 1 & "." & Year(Cells(8, 3))), 12)).Copy
    End With
    'Im Eingabebereich des aktiven Blattes einfuegen
    Range("D8").PasteSpecial Paste:=xlValues
    'Eingabebereich sicherheitshalber auf gesperrt setzen
    Range("D8:L38").Locked = True
    'Wenn der monat aktuell ist, dann
    If Month(Now) = Month(Cells(3, 3).Value) Then
      'Zellen gesperrt setzen bis vor den aktuellen Tag
      Range(Cells(7, 3), Cells(2 + Day(Now) - 1, 12)).Locked = True
      'Zellen frei setzen ab dem aktuellen Tag
      Range(Cells(7 + Day(Now), 3), Cells(38, 12)).Locked = False
    'Ende Wenn der monat aktuell ist, dann
    End If
    'Blattschutz setzen
    ActiveSheet.Protect Password:="BlaBla"
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#14

.docx   Screenshot1.docx (Größe: 174,19 KB / Downloads: 9)
Hallo,

habe mal einen Sreenshot gemacht...  hakt jetzt an meiner Unwissenheit...
Antworten Top
#15
Hallöchen,

Du kannst hier auch Bilder einfügen. Den Screenshot mit paint oder einem anderen Programm speichern - windows hat übrigens das Snipping Tool, das geht auch ganz gut, und dann anhängen und in den Beitrag einfügen.

Du hast ein paar Anführungszeichen zu viel und mmm zu wenig ....
nicht
...Sheets("Format(...)")...
sondern
...Sheets(Format(cells(8,3), "mmm"))...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#16
Heart Heart Heart Heart Heart
Herzliche Danke !

Ich habe es nun so wie ich es benötigt habe !

LG
Antworten Top
#17
Hallo, jetzt habe ich hin und her probiert, aber er findet den Bezug nicht:

With Workbooks(Mitarbeiter & " Stundenabrechnung2016.xls").Sheets(Format(Cells(8, 2), "dd/mm"))


Nur mal für mein Verständnis;   Deine Angabe   (Format(Cells(8, 2), "mmm"))       (durch) sucht in allenSheets nach Zelle B8 nach "Monat" ?

Wenn ich das so Eingebe kommt Laufzeitfehler Nr. 9 Index außerhalb des gültigen Bereichs.


Und nu?

I c h   h a b e " N U L L "   Ahnung.
Antworten Top
#18
Hallöchen,

Das Blatt heißt doch Jan, deswegen mmm und nix anderes.

Bei den Daten ging ich davon aus, das in Zeile 1 der 1.1. steht. Ist das nicht der Fall, muss die Zeilennummer für's kopieren bzw. im anderen Makro fürs einfügen angepasst werden. Ich schaue heute Abend noch mal in die Ilse Smile
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#19
Hallöchen,

ich hatte diesen Teil
Code:
With Workbooks(Mitarbeiter & " Stundenabrechnung2016.xls").Sheets("Jan")
      .Range(.Cells(DateDiff("d", "01.01." & Year(Now), Cells(8, 3)) + 1, 4), _
             .Cells(DateDiff("d", "01.01." & Year(Now), "01." & Month(Cells(8, 3)) + 1 & "." & Year(Cells(8, 3))), 12)).Copy
Variabel, wie gesagt, wegen "..alle Tage eines Jahres untereinander..."
Hier muss wieder ein fester Wert rein,
Code:
With Workbooks(Mitarbeiter & " Stundenabrechnung2016.xls").Sheets("Jan")
      .Range("D8:L38").Copy
(ungetestet). Beim Zurückschreiben dann auch entsprechend ändern.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#20
Hallo Andre,
und jetzt kommt doch die "Gretchen - Frage "

Wenn in Mappe Stempeluhr "Start" z B der Februar in A14 ausgewählt ist, dann in Mitarbeiter & Stundenabrechnung auf Blatt "Feb" zugreifen.
Wenn in Mappe Stempeluhr "Start" z B der März in A14 ausgewählt ist, dann in Mitarbeiter & Stundenabrechnung auf Blatt "März" zugreifen.

Wie macht man diesen Bezug für VBA  HOFFÄHIG? :22:
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste