Feststellen in welcher Zelle Checkbox steht
Hallo Leute,
ich verwende excel2000.
Ich habe ein Tabellenbaltt mit 260 Checkboxen, welche über die Steuerelement-Toolbox erstellt wurden.
Aus Eingabegründen kann ich kein Userform verwenden.
Je nachdem welche Checkboxen aktiviert sind, werden in andere Tabellenblätter Daten geschrieben.
Mein Problem ist, dass die Checkboxen wegen der Menge der Checkboxen schlecht zu aktivieren sind.
Jetzt möchte ich versuchen die Checkboxen durch anklicken der Zellen unter den Checkboxen zu aktivieren.
Kann mir jemand sagen, wie ich per VBA feststellen kann über welcher Zelle die Checkbox liegt?
Ich dank Euch schon mal für Eure Zeit
all the best
Eleve
Antwort schreiben
Antwort 1 von coros vom 14.07.2021, 14:05 Options
Hallo Eleve,
ich glaube, dass was Du vorhast, wird nicht funktionieren. Mir ist jedenfalls keine Methode bekannt, wie man herausfinden kann, über welcher Zelle sich eine Objekt befindet. Man kann zwar mit
Worksheets(1).CheckBox1.TopLeftCell.Address
herausfinden, über welcher Zelle sich ein Objekt, hier die CheckBox1, befindet, aber umgekehrt, keine Ahnung. Aber das muss ja nichts heißen, wenn ich es nicht weiß.
Ich vermute aber mal, dass Dir nichts anderes übrig bleibt als das nach folgendem Beispiel zu realisieren:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$D$9" Then CheckBox1 = True
If Target.Address = "$D$11" Then CheckBox2 = True
If Target.Address = "$D$13" Then CheckBox3 = True
End Sub
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 2 von Eleve vom 14.07.2021, 14:52 Options
Hallo Oliver,
vielen Dank für die, wie immer, superschnelle Hilfe.
Ich denk mit Excel und der Möglichkeit des "Werte runterziehen" werde ich mein Problem mittels Deiner Anregung lösen.
Viel Fußarbeit aber es wird funktionieren.
Schöne Grüße
Eleve
Antwort 3 von Beverly vom 15.07.2021, 16:10 Options
Hi,
weise jeder CheckBox eine LinkedCell zu. Mit folgendem Code werden die CheckBoxen dann aktiviert bzw. deaktiviert wenn die betreffende Zelle angefahren wird:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("F2:F200")) Is Nothing Then Target = Not Target = True
End Sub
Wenn es kein zusammenhängender Zellbereich ist, kannst du auch in einer Select Case Anweisung alle in Frage kommenden Adressen zusammenfassen:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Select Case Target.Address
Case "$F$2", "$F$4", "$F$6", "$H$25"
Target = Not Target = True
End Select
End Sub
Bis später,
Karin
Antwort 4 von Eleve vom 16.07.2021, 09:24 Options
Hallo Karin
Variante 1 funktioniert. Jetzt steht zwar in der Linked Cell "Wahr" oder "Falsch", aber da kann man ja mogeln und die Schriftfarbe auf weiß setzten ;-)
vielen Dank für die Hilfe
liebe Grüße
Eleve
Antwort 5 von Eleve vom 16.07.2021, 10:44 Options
Hallo Oliver,
ich habe Deine Idee modifiziert und so läuft es:
If Not Intersect(Target, Range("c5")) Is Nothing Then _
If CheckBox1 = True Then CheckBox1 = False Else If _
CheckBox1 = False Then CheckBox1 = True
Die Zeile schaltet die Checkbox bei Click auf die Zelle an oder aus.
Vielen Dank für Eure Hilfen
Problem gelöst.
Eleve
Antwort 6 von Beverly vom 16.07.2021, 11:11 OptionsLösung
Hi,
weshalb so kompliziert? Das Ganze funktioniert doch auch nach dem von mir geposteten Prinzip::
If Target.Address = "$C$5" Then CheckBox1 = Not CheckBox1 = True
Wenn du nur 1 Zelle ansprichst benötigst du kein Intersect.
Oder verwende die Select Case Methode:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Select Case Target.Address
Case "$F$2"
CheckBox1 = Not CheckBox1 = True
Case "$F$4"
CheckBox2 = Not CheckBox2 = True
Case "$F$6"
CheckBox3 = Not CheckBox3 = True
Case "$H$25"
CheckBox4 = Not CheckBox4 = True
End Select
End Sub
Bis später,
Karin
Antwort 7 von Eleve vom 16.07.2021, 12:11 Options
Liebe Karin,
Du hast vollkommen recht! Geht wirklich schneller und einfacher!
Konnte nur leider Deinen zweiten Vorschalg oben nicht umsetzten.
Mit dem letzten Post hat es geklappt.
Vielen Dank nochmal
Eleve