Werte datumsabhängig in anderes Tabellenblatt kopieren
Hallo,
ich habe ein kleines Makro, welches Messwerte im Blatt Tabelle1 einträgt. Nun möchte ich diese Monatswerte ( A13:H2988 ) am jeweiligen Monatsersten kopieren in ein anderes Tabellenblatt. Also am 01.05.09 in das Blatt 0409 , am 01.06.09 in das Blatt 0509 usw. Ich habe dazu in A1 mit =Heute() das aktuelle Datum und in B1 mit =TAG(A1) und in C1 mit =Monat(A1)-1 mir den Tag und den Vormonat aus dem Datum herausgezogen. Nun müsste das Makro erkennen, wenn B1 =1, dann kopiere die Werte in das Blatt vom Vormonat. Leider bekomme ich das ohne Hilfe nicht hin. Vielleicht kann mir jemand helfen.
Freundliche Grüße
Lamotte2
Antwort schreiben
Antwort 1 von Beverly vom 29.05.2021, 10:16 Options
Hi,
wenn du die Arbeitsmappe jeden Tag öffnest sollte es ausreichen, wenn du den Tag in A1 prüfst:
Private Sub Workbook_Open()
If Day(Range("A1")) = 1 Then MsgBox "Bitte kopieren"
End Sub
Bis später,
Karin
Antwort 2 von Lamotte2 vom 29.05.2021, 16:23 Options
Hallo Karin,
an der Datei arbeiten mehrere Personen, die nicht alle so vertraut mit Excel sind. Deshalb sollte alles möglchst automatisch ablaufen.
Trotzdem Danke für Deine Antwort.
Gruß Lamotte2
Antwort 3 von Beverly vom 29.05.2021, 19:22 Options
Hi,
sorry, aber welchen Automatismus möchtest du denn noch? Du hast geschrieben, dass du bereits ein Makro hast, welches die Daten kopiert und du nur noch wissen möchtest, wie man das Ganze automatisch auslösen kann wenn der Monatserste eintritt - und genau das macht der Code. Beim Öffnen der Arbeitsmappe wird am 1. jedes Monats der Code ausgeführt. Du musst nur noch anstelle der MsgBox deinen Makronamen schreiben, ich kenne ihn nicht und musste es deshalb mit der einfachsten Methode testen - und das ist eine MsgBox...
Bis später,
Karin
Antwort 4 von Lamotte2 vom 29.05.2021, 20:58 Options
Hallo Karin,
ich möchte, dass am 01.05. in das Sheet 0409, am 01.06. in das Sheet 0509,am 01.07. in das Sheet 0609 usw. ( Monatsabschluß ) kopiert wird. Ansonsten müsste ich das Makro jeden Monat verändern.
Schöne Feiertage und bis nach Pfingsten.
Lamotte2
Antwort 5 von Beverly vom 30.05.2021, 09:50 Options
Hi,
bei mir wird jeweils am Monatsersten beim Öffnen der Arbeitsmappe die MsgBox aufgerufen. Wenn du nun - wie in meinem vorhergehenden Beitrag geschrieben - die MsgBox durch deinen Makronamen ersetzt, wird bei dir jeweils am Monatsersten dein Makro ausgeführt. Warum musst du denn da jeden Monat das Makro verändern? Also irgendwie verstehe ich deine Logik nicht.
Bis später,
Karin
Antwort 6 von fedjo vom 30.05.2021, 14:47 Options
Hallo,
wenn ich deine Angaben richtig verstanden haben, dann sollten die Daten gleich in das richtige Tabellenblatt eingefügt werden.
Dazu ein kleines
Muster.
A1= Heute
B1= Tag
C1= Monat
Private Sub Workbook_Open()
Dim j As String
j = Format(Date, "YY")
If Sheets(1).Range("B1") = 30 Then
Sheets(1).Range("H13:H2988").Copy _
Worksheets("0" & Range("C1") - 1 & j).Range("H13:H2988")
End If
End Sub
Gruß
fedjo
Antwort 7 von fedjo vom 30.05.2021, 14:55 Options
Oh hatte ich glatt übersehen:
In Range("B1") muß natürlich eine 1 stehen.
If Sheets(1).Range("B1") = 1 Then
fedjo
Antwort 8 von Lamotte2 vom 06.06.2021, 06:13 Options
Hallo fedjo,
ich war über Pfingsten im Urlaub, deshalb möchte ich mich erst jetzt bedanken. Deine Lösung ist genau das, was ich gesucht habe. Klappt hervorragend.
Vielen Dank und schönes Wochenende.
Gruß
Lamotte2
Antwort 9 von fedjo vom 06.06.2021, 08:32 Options
Hallo Lamotte2,
es gibt auch noch die Möglichkeit ohne die Zellen nach dem Datum abzufragen.
Code in diese Arbeitsmappe eintragen.
Gruß
fedjo
Option Explicit
Sub Monat()
Dim m As String
Dim j As String
j = Format(Date, "YY")
m = Format(Date, "mm") - 1
If Format(Date, "dd") = 1 Then ' Tag wird abgefragt
Sheets(1).Range("H13:H2988").Copy _
Worksheets("0" & m & j).Range("H13:H2988") 'Daten werden eingetragen
End If
End Sub
Antwort 10 von tomasd vom 02.01.2022, 14:13 Options
Hallo Fedjo ,
ich wünsche Dir und allen anderen ein gutes neues Jahr.
Dein Makro hat in den Monaten 1 bis 9 ausgezeichnet funktioniert. Für die Monate 10 bis 12 habe ich den Code etwas ändern müssen:
Sheets(1).Range("H13:H2988").Copy _
Worksheets("0" & m & j).Range("H13:H2988") 'Daten werden eingetragen
in
Sheets(1).Range("H13:H2988").Copy _
Worksheets(m & j).Range("H13:H2988") 'Daten werden eingetragen
Zum Jahreswechsel am 01.01.10 funktioniert das Makro leider nicht. Vermutlich findet das Makro den Dezember als vorherigen Monat nicht.
Mfg
tomasd
Antwort 11 von fedjo vom 03.01.2022, 18:08 Options
Hallo tomasd (Lamotte2 ),
habe den Code etwas umgestellt:
Sub Monat()
Dim D As String
D = Format(DateSerial(Year(Date), Month(Date) - 1, Day(Date)), "mmyy")
If Format(Date, "dd") = 1 Then ' Tag wird abgefragt
Worksheets("Tabelle1").Range("H13:H2988").Copy _
Worksheets(D).Range("H13:H2988") 'Daten werden eingetragen
End If
End Sub
Das Makro funktioniert z.B. mit Sheets Namen: "1209"
Solltest du z.B. den Sheets Namen: "12 09" bevorzugen ,
dann den Code so umstellen: D = Format(DateSerial(Year(Date), Month(Date) - 1, Day(Date)), "mm yy")
Natürlich kannst du das Makro auch in
Private Sub Workbook_Open()
oder Private Sub Worksheet_Activate() einfügen.
Gruß
fedjo
Antwort 12 von fedjo vom 04.01.2022, 11:24 Options
Hallo tomasd ,
du könntest auch noch das dazu nötige Tabellenblatt vom Makro erstellen lassen.
Gruß
fedjo
Sub Monat_Tabellenblatt()
Application.ScreenUpdating = False
Dim x As Object
Dim neu$, mldg$, title$
Dim ergebnis%, stil%
If Format(Date, "dd") = 1 Then ' Tag wird abgefragt
'Tabellenblatt wird erstellt
neu = Format(DateSerial(Year(Date), Month(Date) - 1, Day(Date)), "mmyy")
For Each x In ActiveWorkbook.Sheets
If x.Name = neu Then
mldg = "Blattname existiert bereits!"
stil = vbCritical + vbOKOnly
title = "Achtung"
ergebnis = MsgBox(mldg, stil, title)
Exit Sub
End If
Next x
Sheets.Add
ActiveSheet.Name = neu
Worksheets("Tabelle1").Select
Dim D As String
D = Format(DateSerial(Year(Date), Month(Date) - 1, Day(Date)), "mmyy")
Sheets(1).Range("H13:H2988").Copy _
Worksheets(D).Range("H13:H2988") 'Daten werden eingetragen
End If
End Sub
Antwort 13 von tomasd vom 06.01.2022, 17:01 Options
Hallo fedjo,
ich bin noch nicht dazu gekommen das Makro zu testen. Möchte mich aber trotzdem schon mal vorab bedanken für deine schnelle Antwort.
Freundliche Grüße
tomasd
Antwort 14 von tomasd vom 01.02.2022, 02:21 Options
Hallo Fedjo,
habe heute das Makro anläßlich des Monatswechsels gestartet und deine Lösung erfolgreich getestet. Dabei ist aber ein anderes Problem aufgetreten. Nach dem Kopieren in das Tabellenblatt D("0110"):
D = Format(DateSerial(Year(Date), Month(Date) - 1, Day(Date)), "mmyy")
If Format(Date, "dd") = 1 Then ' Tag wird abgefragt
Worksheets("Tabelle1").Range("H13:H2988").Copy _
Worksheets(D).Range("H13:H2988") 'Daten werden eingetragen
sollten in dem neuen Tabellenblatt die Spalten A bis D ausgeblendet werden ( funktionierte bisher mit der alten Lösung )
Columns("A:D"),select
Selection.EntireColumn.Hidden = True
ich als Laie habe davor noch
ActiveSheet.select
gesetzt, aber es bleibt offenbar "Tabelle1" aktives Sheet. Kannst Du mir noch mal helfen, wie ich das neue Tabellenblatt ansprechen muß für weitere Aktionen ?
Freundliche Grüße
tomasd
Antwort 15 von fedjo vom 01.02.2022, 17:19 Options
Hallo tomasd,
zum Ausblenden der Spalten A:D.
End If
Worksheets(D).Columns("A:D").EntireColumn.Hidden = True
End Sub
Gruß
fedjo
Antwort 16 von tomasd vom 06.02.2022, 11:31 Options
Hallo Fedjo,
ich habe deine Lösung heute getestet und es funktioniert bestens. Nochmals vielen Dank für Deine Hilfe.
Freundliche Grüße
tomasd