Hello Detlef,
Es tut mir leid, aber du hast eine neuere Version von Checkboxen verwendet die mein altes Excel noch nicht unterstützt. Ich sehe zwar das visuelle Bild. Kriege es aber nicht interaktiv. Daher habe ich diese für meine Tests durch ältere ActiveX-Checkboxen ersetzt. Solltest du Probleme damit kriegen, übernimm einfach nur den Code.
Was mir auffiel: Wenn du eine neue ActiveX-Checkbox hinzufügst steht in den Eigenschaften als Platzierung "Nur von Zellposition abhängig" Dadurch verschieben sich die Checkboxen beim Ausblenden von Zeilen. Wähle also "Von Zellposition und -größe" abhängig. Dann werden die Checkboxen mit den Zeilen ausgeblendet. Damit du das nicht für 1500 Checkboxen manuell umstellen musst, kannst du auch einmalig folgendes simples Makro ausführen. Danach kannst du den Code wieder löschen.
Sub Platzierung()
For Each shp In Sheets(1).Shapes
If InStr(1, shp.Name, "CheckBox") > 0 Then
shp.Placement = xlMoveAndSize
End If
Next shp
End Sub
Nachdem du die Platzierung angepasst hast, füge ein neues Klassenmodul "Klasse1" ein und gib ihm diesen Code mit:
Public WithEvents cbx As MSForms.CheckBox
Private Sub cbx_Click()
Dim CheckBox2 As Object
Set CheckBox2 = Sheets("IBN-Checkliste").Shapes("CheckBox2").OLEFormat.Object.Object
If cbx.Value = True Then
cbx.Caption = "R"
Else
cbx.Caption = Chr$(163)
End If
If CheckBox2.Value = True And Not Intersect(cbx.TopLeftCell, Range("R:U")) Is Nothing Then
If cbx.Name = "CheckBox2" Then
Rows("18:19").Hidden = cbx.Value
Else
cbx.TopLeftCell.EntireRow.Hidden = cbx.Value
End If
End If
End Sub
Anschließend kommt der folgende Code in das Modul "DieseArbeitsmappe"
Dim chkbx(1500) As New Klasse1 'Wert 1500 ggf erhöhen, z.B. bei Fehler "Index außerhalb Bereich"
Private Sub Workbook_Open()
Dim shp As Shape
For Each shp In Sheets("IBN-Checkliste").Shapes
If shp.Type = msoOLEControlObject Then
If TypeName(shp.OLEFormat.Object.Object) = "CheckBox" Then
i = i + 1
Set chkbx(i).cbx = shp.OLEFormat.Object.Object
End If
End If
Next shp
End Sub
Deinen Code aus "Tabelle1" solltest du spätestens jetzt komplett löschen.
Schließe nun die Datei (Speichern nicht vergessen) und öffne sie erneut.
ActiveX-Checkboxen sind sehr speicherintensiv. Die langen Ladezeiten beim Öffnen kriegst du bei der Menge so leider nicht weg, aber der Code ist optimiert und gilt für alle Checkboxen gleichermaßen. Beispiel: https://workupload.com/file/rGLywqeV3vw
Wenn du auch auf die langen Ladezeiten beim Öffnen verzichten willst, verwende Formular-Kontrollkästchen anstatt Aktiv-X Checkboxen. Diese lassen sich nur leider nicht korrekt platzieren und müssen ausgeblendet werden. Wie du damit arbeitest zeige ich dir in diesem Beispiel: https://workupload.com/file/6vFQEaK27HA Das geht doch gleich viel flüssiger von der Hand, stimmts? Das Passwort für das VBA-Projekt ist unverändert.
PS: Am besten du speicherst die Datei als Mustervorlage (*.xltx). Damit vermeidest du, dass jemand seine Häkchen direkt in deiner Datei speichert. Durch die Mustervorlage wird er gezwungen, seine bearbeitete Datei unter neuem Namen abzuspeichern.
Gruß Mr. K.
|