Hallo Chantal,
könnte es sein, dass du den Code von hier hast? https://www.herber.de/forum/archiv/960to964/t963569.htm
Wie auch immer, so ganz verstehe ich ihn (in deiner Version) nicht.
In CommandButton1_Click() steht
ActiveSheet.Name = Format(DateSerial(Year(Date), Month(Date) - 3, 1), "MMMM YYYY")
MsgBox "Monat erfolgreich erstellt"
Sheets("Hauptzähler").Select
Range("C1").FormulaR1C1 = "Feb-2008"
Damit wird, wenn es zufällig gerade Februar ist, wegen "Month(Date) - 3" ein Blatt "November 2007" erstellt.
Darunter schreibst du aber "Feb-2008".
Ich vermute, du willst bei einem Button unabhängig vom Tagesdatum (Date) immer den selben Monat erstellen, also mit CommandButton1 immer einen Februar.
Zum zweiten ist es sehr umständlich, den (fast) gleichen Code 11 mal hinzuschreiben.
Das geht einfacher, wenn du beim CommandButtonX_Click() nur den gewünschten Monat schreibst
und damit eine andere Prozedur aufrufst, die die Arbeit macht.
So könnte das aussehen:
In den Code der Userform:
Option Explicit
Private Sub CommandButton1_Click()
LegeAn 2
End Sub
Private Sub CommandButton3_Click()
LegeAn 3
End Sub
Private Sub CommandButton4_Click()
LegeAn 4
End Sub
'usw. bis
Private Sub CommandButton12_Click()
LegeAn 12
End Sub
Private Sub CommandButton13_Click()
Unload Me ' wenn dieser Code zur UserForm4 gehört
End Sub
Private Sub UserForm_Click()
If Val(Application.Version) >= 9 Then
hwndForm = FindWindow("ThunderDFrame", Me.Caption)
Else
hwndForm = FindWindow("ThunderXFrame", Me.Caption)
End If
bCaption = False
SetUserFormStyle
End Sub
In ein allgemeines Modul kannst du das schreiben:
Option Explicit
Sub LegeAn(intMon As Integer)
Dim lngZ As Long, intM As Integer
' Hier wird geprüft, ob die früheren Monate schon angelegt sind:
For intM = 1 To intMon - 1
If Not SheetExists(Format(DateSerial(Year(Date), intM, 1), "MMMM YYYY")) Then
Unload UserForm4
MsgBox "Der Monat " & intM & " existiert noch nicht", _
vbCritical + vbOKOnly, "Fehler"
Exit Sub
End If
Next intM
' Hier wird geprüft, ob der gewünschte Monate schon angelegt ist:
If SheetExists(Format(DateSerial(Year(Date), intMon, 1), "MMMM YYYY")) Then
Unload UserForm4
UserForm7.Show
' MsgBox "Der Monat " & intMon & " existiert schon", _
vbCritical + vbOKOnly, "Fehler"
Exit Sub
End If
With Sheets("Hauptzähler")
.Unprotect Password:="Felix"
.Copy Before:=Sheets(1)
ActiveSheet.Name = Format(DateSerial(Year(Date), intMon, 1), "MMMM YYYY")
MsgBox "Monat erfolgreich erstellt"
.Select
Range("C1") = Format(DateSerial(Year(Date), intMon, 1), "MMM-YYYY")
For lngZ = 33 To 30 Step -1
If Not IsEmpty(Cells(lngZ, 3)) Then
Cells(lngZ, 3).Copy Cells(3, 3)
Exit For
End If
Next lngZ
Range("C4:C33").ClearContents
Range("B4").Select
ActiveCell.FormulaR1C1 = "=IF(ISNUMBER(RC[1]),RC[1]-R[-1]C[1],"""")"
Selection.AutoFill Destination:=Range("B4:B33"), Type:=xlFillDefault
Range("B34").FormulaR1C1 = "=SUM(R[-30]C:R[-1]C)"
Unload UserForm4
.Protect Password:="Felix"
End With
End Sub
Function SheetExists(strName As String) As Boolean
Dim intInd As Integer
On Error GoTo XEnd
intInd = Sheets(strName).Index
SheetExists = True
XEnd:
On Error GoTo 0
End Function
Das ist jetzt nicht getestet - ich will deine Umgebung nicht nachbauen.
Wenn es Probleme gibt, wäre eine Beispielmappe hilfreich.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort