ich habe in Excel ein Formular erzeugt und ein Makro, welches beim Öffnen der Datei eine Liste mit Optionen ausliest und für jede Option eine Checkbox im Formular erzeugt und generell das Formular zurücksetzt.
Das funktioniert soweit auch, bis auf das benennen der Checkboxen. Anstatt des unter der ".Name" Methode angegebenen Namens bekommen die ersten 33 Checkboxen den Namen "CheckBox1-66". Führe ich das Makro manuell über den VBA-Editor aus, funktioniert alles korrekt. Ich kann mir dieses Verhalten mittlerweile nicht mehr erklären.
Dazu habe ich folgendes Makro, welches mit einem Workbook_open() Event getriggert wird.
Public Sub Clr_form()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
Dim oleObj As OLEObject
Dim Top As Long, Left As Long
Dim i As Long
Top = 155
Left = 140
With Sheets("Formular")
For Each oleObj In .OLEObjects
If TypeName(oleObj.Object) = "CheckBox" And (InStr(oleObj.Name, "cb_Option_") Or _
InStr(oleObj.Name, "CheckBox")) Then
oleObj.Delete
ElseIf TypeName(oleObj.Object) = "TextBox" And (InStr(oleObj.Name, "tb_Option_") Or _
InStr(oleObj.Name, "TextBox")) Then
oleObj.Delete
End If
Next
.lb_ComboBox1.Value = ""
.lb_ComboBox2.Value = ""
.lb_ComboBox3.Value = ""
.tb_TextBox1.Value = ""
.tb_TextBox2.Value = ""
.tb_TextBox3.Value = ""
.tb_TextBox4.Value = ""
.tb_TextBox5.Value = ""
.tb_TextBox6.Value = ""
.tb_TextBox7.Value = ""
For i = .Cells(Rows.Count, 2).End(xlUp).row To 10 Step -1
If .Cells(i, 2) = "Belegt" Then
.Cells(i, 2).EntireRow.Delete
End If
Next
For Each oleObj In .OLEObjects
If TypeName(oleObj.Object) = "CheckBox" And InStr(oleObj.Name, "cb_Option") Then
oleObj.Object.Value = False
End If
Next
End With
For i = 2 To Sheets("Checkbox Daten").Cells(Rows.Count, 1).End(xlUp).row
If i - 1 = 1 Then
Sheets("Formular").Cells(9 + i - 2, 4) = "Text1"
Sheets("Formular").Cells(9 + i - 2, 8) = Sheets("Checkbox Daten").Cells(i, 3)
Else
Sheets("Formular").Cells(9 + i - 2, 1).EntireRow.Insert
Sheets("Formular").Cells(9 + i - 2, 4) = "Text1"
Sheets("Formular").Cells(9 + i - 2, 8) = Sheets("Checkbox Daten").Cells(i, 3)
Sheets("Formular").Rows("9:9").Copy
Sheets("Formular").Rows(9 + i - 2 & ":" & 9 + i - 2).PasteSpecial Paste:= _
xlPasteFormats
Sheets("Formular").Cells(9 + i - 2, 2) = "Belegt"
End If
With Sheets("Formular").OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, _
DisplayAsIcon:=False, Left:=147, Top:=198, Width:=108, Height:=21)
.Name = "cb_Option_name_" & i - 1
.Object.Caption = "Option " & Sheets("Checkbox Daten").Cells(i, 2)
.Object.Value = False
.Width = Len(.Object.Caption) * 9
.Left = Left
.Top = Top + (i - 2) * 22.5
End With
With Sheets("Formular").OLEObjects.Add(ClassType:="Forms.TextBox.1", Link:=False, _
DisplayAsIcon:=False, Left:=147, Top:=198, Width:=30, Height:=21)
.Enabled = False
.Object.BackColor = RGB(190, 190, 190)
.Name = "tb_Option_rev_" & i - 1
.Left = 317.25
.Top = Top + (i - 2) * 22.5
End With
With Sheets("Formular").OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, _
DisplayAsIcon:=False, Left:=147, Top:=198, Width:=30, Height:=21)
.Name = "cb_Option_new_" & i - 1
.Object.Caption = "Aktuelle Revision"
.Object.Value = True
.Width = Len(.Object.Caption) * 6
.Left = 394
.Top = Top + (i - 2) * 22.5
End With
Next
Application.OnTime Now + TimeValue("00:00:01"), "set_rev_boxes"
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub