4.6k Aufrufe
Gefragt in Tabellenkalkulation von
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

16 Antworten

0 Punkte
Beantwortet von fedjo Experte (2.2k Punkte)
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
0 Punkte
Beantwortet von fedjo Experte (2.2k Punkte)
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
0 Punkte
Beantwortet von tomasd Einsteiger_in (53 Punkte)
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
0 Punkte
Beantwortet von tomasd Einsteiger_in (53 Punkte)
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
0 Punkte
Beantwortet von fedjo Experte (2.2k Punkte)
Hallo tomasd,
zum Ausblenden der Spalten A:D.

End If
Worksheets(D).Columns("A:D").EntireColumn.Hidden = True
End Sub

Gruß
fedjo
0 Punkte
Beantwortet von tomasd Einsteiger_in (53 Punkte)
Hallo Fedjo,
ich habe deine Lösung heute getestet und es funktioniert bestens. Nochmals vielen Dank für Deine Hilfe.
Freundliche Grüße
tomasd
...