Kontrollkästchen aktivieren/deaktivieren per VBA

Hallo an alle VBA-Experten,

ich habe folgendes Problem. In meiner Excel-Tabelle habe ich drei Kontrollkästchen in einer Zeile in jeweils einer Spalte. Die Kästchen wurden mit Excel und nicht mit VBA gesetzt. Die Werte sind 8%, 10% und 12%. Das Häckchen ist bei 8% gesetzt. Nun möchte ich dort den Haken rausnehmen und diesen bei 10% reinsetzen.
Wäre toll, wenn mir jemand den kompletten Code schreiben könnte (also mit Dim … und Objektdefinition usw.), da VBA extremes Neuland für mich ist.
Ich habe schon folgenden Code:
CheckBox1.Value = True bzw. False
Wie muss ich dazu ein Objekt definieren, weil die Fehlermeldung kommt: Objekt erforderlich bzw. Typen unverträglich.

Kann mir da jemand weiterhelfen?

VG und schon mal vielen Dank
Astrid

Wäre toll, wenn mir jemand den kompletten Code schreiben
könnte (also mit Dim … und Objektdefinition usw.), da VBA
extremes Neuland für mich ist.
Ich habe schon folgenden Code:
CheckBox1.Value = True bzw. False
Wie muss ich dazu ein Objekt definieren, weil die
Fehlermeldung kommt: Objekt erforderlich bzw. Typen
unverträglich.

Hi Astrid,

such dir was aus :smile:

Option Explicit
'
Sub CB1()
With Worksheets("Tabelle1").OLEObjects("Checkbox1").Object
 .Value = True
End With
End Sub
'
Sub CB2()
With Worksheets("Tabelle1").CheckBox1
 .Value = False
End With
End Sub
'
Sub CB3()
Dim CB As Object
Set CB = Worksheets("Tabelle1").CheckBox1
CB.Value = False
End Sub
'
Sub CB4()
Worksheets("Tabelle1").CheckBox1.Value = True
End Sub

Gruß
Reinhard

Hi Astrid,

such dir was aus :smile:

Gruß
Reinhard

DANKESCHÖN, DANKESCHÖN, DANLESCHÖN…
… für die schnelle Antwort. Ich werde es heute abend gleich mal ausprobieren und gebe dann noch mal ein Feedback.

Hallo Astrid.

drei Kontrollkästchen in einer Zeile in jeweils einer Spalte.
Die Kästchen wurden mit Excel und nicht mit VBA gesetzt. Die
Werte sind 8%, 10% und 12%. Das Häckchen ist bei 8% gesetzt.
Nun möchte ich dort den Haken rausnehmen und diesen bei 10%
reinsetzen.

Ich könnte mir denken, daß Du zwischen den Werten 8%, 10% und 12% hin- und herwechseln möchtest und immer nur einer davon „aktiv“ ist. Falls das so ist, wäre es eigentlich sinnvoll, anstatt der CheckBoxen lieber OptionButtons zu verwenden. Dann brauchst Du theoretisch gar keinen Code mehr.

VG
Carsten

Hallo Carsten,

Ich könnte mir denken, daß Du zwischen den Werten 8%, 10% und
12% hin- und herwechseln möchtest und immer nur einer davon
„aktiv“ ist. Falls das so ist, wäre es eigentlich sinnvoll,
anstatt der CheckBoxen lieber OptionButtons zu verwenden. Dann
brauchst Du theoretisch gar keinen Code mehr.

VG
Carsten

Da hast du recht. Ich will nicht mehr 8% Gewinn hinzurechnen, sondern 10%. D.h. bei 8% den Haken raus und bei 10% rein. Soweit so gut.
Leider habe ich bereits ca. 10.000 vorhandene Excel-Dateien und in jeder ist diese CheckBox drin.
Ergo: Ich muss versuchen ein Makro zu schreiben, um zu realisieren, dass der Haken in der einen CheckBox raus- und in die andere reinkommt.
Aber wie schon gesagt, ich werde gleich mal das Makro von Reinhard probieren.

VG Astrid

Da hast du recht. Ich will nicht mehr 8% Gewinn hinzurechnen,
sondern 10%. D.h. bei 8% den Haken raus und bei 10% rein.
Soweit so gut.
Leider habe ich bereits ca. 10.000 vorhandene Excel-Dateien
und in jeder ist diese CheckBox drin.
Ergo: Ich muss versuchen ein Makro zu schreiben, um zu
realisieren, dass der Haken in der einen CheckBox raus- und in
die andere reinkommt.
Aber wie schon gesagt, ich werde gleich mal das Makro von
Reinhard probieren.

hallo Astrid,

meine Prozeduren gehen davon aus daß sie in einer Mappe stehen und aufgerufen werden.

Viel Sinn habe ich in deiner Anfrage nicht gesehen, in Excel klickst du in das Feld und es wechselt den Zustand, warum dafür ein Makro aufrufen ist mir unklar.

Und, ich habe mir auch schon gedacht daß du mehr willst als in deiner Ausgangsanfrage steht. Zumindest so daß wenn du auf 8 % klickst, die Häkchen bei 10 und 12 % verschwinden und umgekehrt.

Jetzt erzählst du von 10.000 Mappen.

Die Anzahl ist nicht das Problem, das Problem bist quasi du, was möchtest du eigentlich genau?

Sag mal an, was du genau erreichen willst, dann kann man mal schauen ob und wie das geht…

Gruß
Reinhard

Hallo Reinhard,

stimmt, ich hätte dazuschreiben müssen, dass die Dateien bereits vorhanden sind. Mein Fehler.
Also ich habe in meinen Dateien in
Zelle E45 - 8%
Zelle F45 - 10%
Zelle G45 - 12%
Außerdem liegen dort auch jeweils die CheckBoxen bzw. Kontrollkästchen. (Ich weiß nicht, ob das dasselbe ist.)
Der Haken ist bei 8% gesetzt. Jetzt möchte ich aber 10% haben, d.h Haken bei 8 raus und bei 10 rein.
Nun habe ich gesehen, dass für die Checkboxen Hilfszellen in Zeile F existieren, d.h. wenn der Haken gesetzt ist, steht dort „WAHR“ ansonsten „FALSCH“ logisch.
Jetzt hatte ich ein Makro, um die Werte in den Hilszellen zu ändern. Bei 8% auf FALSCH, bei 10% auf WAHR. Hat auch funktioniert. Der Haken bei 8% ist verschwunden, allerdings wurde bei 10% kein Haken gesetzt.

Hier mal grob das Makro:

Sub

Range(„F45“).Select 'Gehe zur Hilfszelle
Erase.Selection 'Lösche Inhalt
ActiveCell.value 'aktiviere die Zelle
… 'schreibe FALSCH
Range(„F46“).Select 'Gehe zur Hilfszelle
Erase.Selection 'Lösche Inhalt
ActiveCell.value 'aktiviere die Zelle
… 'schreibe WAHR

End sub

Das Makro schreibt mir WAHR und FALSCH in die Zellen, nimmt bei 8% den Haken raus, setzt ihn aber NICHT bei 10%.
Was mache ich da falsch?

VG Astrid

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Astrid.

Zunächst sollte geklärt werden, ob diese Kontrollkästchen aus der Symbolleiste „Formular“ oder aus der Symbolleiste „Steuelement-Toolbox“ stammen. Die Unterschiede zwischen diesen Elemente sind wie bei Chantré: Nicht riesig, aber fein. :smile:

Ich stelle 'mal eine Vermutung auf: Die Werte FALSCH und WAHR, die von den Kontrollkästchen in die verküpften Zellen (Ausgabeverküpfung, Zellverknüpfung, LinkedCell) geschrieben werden, werden irgendwo in Deinen Dateien von einer (oder mehreren) WENN-Funktion(en) ausgewertet. Ich bin mir sicher, daß das nicht geändert werden soll, weil es ja so viele Dateien sind.

Grundsätzlich könnte ein Code, der Dir die gewünschte Funktionalität liefert, folgendermaßen aussehen:

Vorraussetztung: Alle Steuerelemente stammen aus der Steuerelement-Toolbox.

Eigenschaften der Checkboxen in den Eigenschaften festlegen:

 (Name) chk08 chk10 chk12
 Caption 8 % 10 % 12 %
 Enabled False True True
 Value True False False

Den folgenden Code in den Deklarations-Abschnitt derjenigen Tabelle einfügen, auf der sich die Checkboxen befinden:

Private Exit08 As Boolean
Private Exit10 As Boolean
Private Exit12 As Boolean

Private Sub chk08\_Change()
 If Exit08 = True Then Exit Sub
 chk08.Enabled = False
 Exit10 = True
 Exit12 = True
 chk10.Value = False
 chk12.Value = False
 chk10.Enabled = True
 chk12.Enabled = True
 Exit10 = False
 Exit12 = False
End Sub

Private Sub chk10\_Change()
 If Exit10 = True Then Exit Sub
 chk10.Enabled = False
 Exit08 = True
 Exit12 = True
 chk08.Value = False
 chk12.Value = False
 chk08.Enabled = True
 chk12.Enabled = True
 Exit08 = False
 Exit12 = False
End Sub

Private Sub chk12\_Change()
 If Exit12 = True Then Exit Sub
 chk12.Enabled = False
 Exit08 = True
 Exit10 = True
 chk08.Value = False
 chk10.Value = False
 chk08.Enabled = True
 chk10.Enabled = True
 Exit08 = False
 Exit10 = False
End Sub

Ich weiß nicht, ob Dir das irgendwie weiterhilft, da ich die Tabellenstruktur und die Auswertung der Kontrollkästchen nicht kenne, aber mit dem Code ist die Funktionalität schon 'mal der der OptionButtons ähnlich.

Letzten Endes wird es wohl ein Problem werden, diesen oder einen anderen Code in die Vielzahl der Dateien hineinzubekommen. Möglicherweise über eine PERSONL.XLS, in der ein Makro gespeichert wird, aber da werde ich Dir nicht helfen können.

VG
Carsten

Danke Carsten, dass du dir soviel Mühe gegeben hast. Ich werde mal versuchen, ob ich das so hinbekomme.
Da VBA ja Neuland für mich ist und ich diese Umstellung jetzt vornehmen muss, war das ein riesen Problem für mich. Ich hoffe, das der Code mir weiterhilft.
Nochmals vielen, vielen Dank.

Hallo Astrid,

stimmt, ich hätte dazuschreiben müssen, dass die Dateien
bereits vorhanden sind.

In welchen Ordner(n) sind die Dateien. Sind da auch andere datein die nicht verändert werden sollen, wenn ja, wie erkennt man das?

Also ich habe in meinen Dateien in
Zelle E45 - 8%
Zelle F45 - 10%
Zelle G45 - 12%
Außerdem liegen dort auch jeweils die CheckBoxen bzw.
Kontrollkästchen. (Ich weiß nicht, ob das dasselbe ist.)
Der Haken ist bei 8% gesetzt. Jetzt möchte ich aber 10% haben,
d.h Haken bei 8 raus und bei 10 rein.

Es gibt dafür in Excel zwei Symbolleisten, Formular und Steuerelementtoolbox, in beiden heißen sie Kontrollkästchen.

In Vba heißen sie unterschiedlich, im ersten Fall
Check Box 1
im zweiten Fall
Checkbox1

Aus diesem Grund bei Anfragen in Vba zu Checkboxen immer angeben aus welcher Symbolleiste sie stammen, denn je nachdem muß man unterschiedlich codieren.
Die laufende Nummer wird von Excel automatisch vergeben.

Nun habe ich gesehen, dass für die Checkboxen Hilfszellen in
Zeile F existieren, d.h. wenn der Haken gesetzt ist, steht
dort „WAHR“ ansonsten „FALSCH“ logisch.

Diese „Hilfszellen“ ändern sich doch automatisch je nachdem ob der Haken gesetzt ist oder nicht, sofern diese Zellen als „LinkedCell“ in den Eigenschaften der Checkboxen diesen zugewiesen sind.

lade mal bitte eine Datei die noch zu ändern wäre, alles außer E45:G45 kannst du ja löschen, hoch mittels FAQ:2861 o.ä.

Pprobiere das mal:

Sub WertAendern()
Dim CB As OLEObject
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
 For Each CB In .OLEObjects
 If Not Intersect(CB.TopLeftCell, Range("E45:F45")) Is Nothing Then
 If CB.TopLeftCell.Address(0, 0) = "E45" Then
 CB.Object.Value = False
 Else
 CB.Object.Value = True
 End If
 End If
 Next CB
End With
Application.ScreenUpdating = True
End Sub

Gruß
Reinhard