Hi,
zu Frage 1: mit OnAction wird dem Steuerelement das Makro zugewiesen welches ausgeführt werden soll - das ist quasi dasselbe, als wenn du von Hand dem Steuerelement ein Makro zuweist, nur dass es eben per VBA gemacht wird.
zu Frage 2a: Application.Caller gibt wieder, wie Code aufgerufen wurde - im konkreten Fall ist es das Steuerelement, welches als Shape angesprochen wird
zu Frage 2b: .ControlFormat ist eine Eigenschaft des Steuerelementes, über das man den ausgewählten ListIndex des Steuerelementes feststellen kann
zu Frage 3: .TopLeftCell ist die linke obere Ecke des Steuerelementes und mit .TopLeftCell.Row kann man die Zeile und mit .TopLeftCell.Column die Spalte der Zelle feststellen, auf der das Steuerelement liegt
zu Frage 4: ein Formular-Steuerelement hat zwar eine Zellverknüpfung, in die schreibt es aber nur den Listindex. Durch Änderung dieser Zelle kann man zwar das Kombinationsfeld "umstellen", aber das Ganze nützt im konkreten Fall nichts, da du ja irgendeinen Zahlenwert, der unabhängig vom ListIndex ist, eintragen willt. Wenn du also das Steuerelement auf Nein stellen willst durch Eintrag in die betreffende Zelle der Spalte B, dann musst du das Worksheet_Change Ereignis nutzen. Dabei musst du in einer Schleife über alle Kombinationsfelder laufen und prüfen, ob .TopLeftCell.Row mit Target.Row übereinstimmt - das ist dann das Steuerelment, für welches du per Code den ListIndex ändern musst
Um die Zelle zu sperren müsstest du den Code für das Steuerelement wie folgt abändern:
Sub Ausfuehren()
With ActiveSheet.Shapes(ActiveSheet.Application.Caller)
ActiveSheet.Unprotect
If .ControlFormat.Value = 1 Then
Cells(.TopLeftCell.Row, 2) = 0
Cells(.TopLeftCell.Row, 2).Locked = True
Else
Cells(.TopLeftCell.Row, 2).Locked = False
End If
ActiveSheet.Protect
End With
End Sub
Bis später,
Karin