21.02.2016, 09:10
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.
Schaue mal, ob es so passt und melde Dich,
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)
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)