Ich bin seit Stunden auf Fehler Suche und komme einfach nicht drauf was es sein könnte.
Ich habe ein VBA UserForm Modul Code
Bei dieser kann ich mehrere Tage (Datum und Monat) einfügen z.B. in Zelle C16 bis C29
Wenn ich jetzt neue Tage einfüge werden mir die alten automatisch gelöscht und die neuen wieder eingefügt.
Mein Problem ist, das ganze funktioniert nur in der C Zelle.
Da ich aber mein Tabellenblatt anpassen muss wollte ich das ganze in die Zelle D verschieben.
Es fügt mir zwar die Tage ein aber die alten Tage werden nicht gelöscht.
Ich habe die betroffene Zeile geändert aber leider funktioniert das nicht in der Zelle D
Sobald ich es wieder in C ändere geht es wieder
Kann mir einer sagen wo der Fehler liegt?
Private Sub CommandButton1_Click()
Dim iMonat As Integer
Dim iJahr As Integer
Dim iListBox As Integer
Dim vTemp() As Variant
Dim iTemp As Integer: iTemp = -1
Dim dDatum As Date
Dim iTag As Integer
Dim iAnzahl As Integer
Dim WkSh As Worksheet
Dim lZeile As Long
If ComboBox1.Value = "" Then
MsgBox "Sie haben keinen Monat ausgewählt - ABBRUCH.", _
48, " Hinweis für " & Application.UserName
ComboBox1.SetFocus
Exit Sub
Else
iMonat = Month("1." & CStr(ComboBox1.Value))
End If
For iListBox = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(iListBox) Then
iTemp = iTemp + 1
ReDim Preserve vTemp(iTemp)
vTemp(iTemp) = iListBox + 1
End If
Next iListBox
If iTemp > -1 Then
lZeile = 16
Else
MsgBox "Sie haben keinen Wochentag ausgewählt - ABBRUCH.", _
48, " Hinweis für " & Application.UserName
ListBox1.SetFocus
Exit Sub
End If
iJahr = ComboBox2.Value
Unload UserForm1
Set WkSh = ThisWorkbook.Worksheets("Tabelle1") ' den Tabellenblattnamen ggf. anpassen!
WkSh.Range("D16:D" & WkSh.Cells(WkSh.Rows.Count, 3).End(xlUp).Row).ClearContents
dDatum = DateSerial(iJahr, iMonat, 1)
For iTag = 1 To TageProMonat(dDatum)
For iTemp = LBound(vTemp) To UBound(vTemp)
If Weekday(dDatum, vbMonday) = vTemp(iTemp) Then
iAnzahl = iAnzahl + 1 * 2
WkSh.Range("D" & lZeile).Value = _
Format(dDatum, "dd.mmmm yyyy")
lZeile = lZeile + 1
Exit For
End If
Next iTemp
dDatum = dDatum + 1
Next iTag
End Sub
Private Sub UserForm_Initialize()
Dim iMonat As Integer
With ComboBox1
.Clear
.Font.Size = 12
.Style = 2
For iMonat = 1 To 12
.AddItem Format(DateSerial(Year(Date), iMonat, 1), "MMMM")
Next iMonat
.ListIndex = Month(Date) - 1 ' den aktuellen Monat anzeigen
End With
With ListBox1
.Clear
.Font.Size = 12
.AddItem "Montag"
.AddItem "Dienstag"
.AddItem "Mittwoch"
.AddItem "Donnerstag"
.AddItem "Freitag"
.AddItem "Samstag"
.AddItem "Sonntag"
End With
With ComboBox2
.Clear
.Font.Size = 12
.Style = 2
.AddItem Year(Date) - 1 ' das Vorjahr
.AddItem Year(Date) ' das aktuelle Jahr
.AddItem Year(Date) + 1 ' das Folgejahr
.ListIndex = 1 ' das aktuelle Jahr anzeigen
End With
With CommandButton1 ' den CommandButton mittig ausrichten
.Left = (UserForm1.Width - CommandButton1.Width) / 2
End With
End Sub