AW: befehlszeile erklären
20.09.2007 10:44:13
fcs
Hallo schnierle,
das Problem in deiner Prozedur ist, dass sich das Selection-Objekt durch die Add.... Zeile ändert. Dadurch wird die eingefügte Verbindungslinie zum selektierten Objekt.
Selection.Name bezieht sich anschließend nicht mehr auf die Checkbox (oder was für ein Shape-Objekt auch immer du vorher selektiert hast) sondern auf die neue Linie.
Du muss also vor dem Einfügen der Verbindungslinie den Namen des selektierten Objekts in eine Variable schreiben und diese dann verwenden.
Da du ja nicht den ganzen Code präsentiert hast was das Testen erschwert noch der Hinweis, dass einige Variablen im Modul zu Beginn als Private deklariert werden müssen, damit es läuft. Diese Infos müssen beim 1. Durchlauf gespeichert werden, da sonst der 2. nicht funktioniert.
Gruß
Franz
Private baktiv As Boolean, dPosTop1 As Long, CheckBox1 As String
Sub KlickediKlack()
Static dPosLeft1 As Double
If Not baktiv Then Exit Sub 'knopf gedrückt?
ActiveSheet.Shapes(Application.Caller).Select
If dPosTop1 = 0 Then 'position der ersten box bestimmen
dPosTop1 = Selection.Top + Selection.Height / 2
dPosLeft1 = Selection.Left + Selection.Width / 3
CheckBox1 = Selection.Name
Else
CheckBox2 = Selection.Name '###### neu
ActiveSheet.Shapes.AddConnector(msoConnectorElbow, dPosLeft1, dPosTop1, _
Selection.Left + Selection.Width / 3, _
Selection.Top + Selection.Height / 2).Select 'position der zweiten box bestimmen
With Selection.ShapeRange 'und elbow-connector einfügen
.Flip msoFlipHorizontal
.Flip msoFlipVertical
' .ForeColor.SchemeColor = 10
.ConnectorFormat.BeginConnect ActiveSheet.Shapes( _
CheckBox1), 3
.ConnectorFormat.EndConnect ActiveSheet.Shapes( _
CheckBox2), 3 ' modifiziert
.Line.ForeColor.SchemeColor = 57
.Line.Visible = msoTrue
.Line.Weight = 2.25
.Line.Visible = msoTrue
.Line.Style = msoLineSingle
End With
dPosTop1 = 0
End If
GoTo weiter '##### die folgenden Zeilen machen bei mir Probleme
If Selection.Value = xlOn Then
Selection.Value = xlOff
Else
Selection.Value = xlOn
End If
weiter:
ActiveCell.Activate
End Sub