Checkboxen im Formular auf false setzen

Hallo,

ich arbeite mit Office 2010 und habe eine Frage zu VBA:

ich habe in einer Userform 6 Checkboxen mit der Eigenschaft value=false.
Ich möchte nur 1x true haben, d.h. wenn Checkbox1 als true markiert ist und Checkbox2 bei einem weiteren Klick ebenfalls markiert (value=true) wird, soll die Markierung von Checkbox1 wieder verschwinden.

Ich habe folgenden Code geschrieben, für alle 6 Checkboxen gleich:
(leider habe ich vergessen, wie die Anweisung heißt, um hier Code correkt einzutragen)

Private Sub Checkbox1_Click()
with Userform1
for i=1 to 6
.controls(„Checkbox“ & i).value=false
next i
Value=true
end with
end sub

Der Code funktioniert nicht. Im Debugger habe ich gesehen, daß, wenn checkbox.value gesetzt wird, der Cursor in die Überschrift „Private Sub Checkbox…“ springt.

Wenn ich die Schleife als Subroutine in Modul1 schreibe und sie von dieser „Private Sub…“ aufrufe, passiert dasselbe, der Cursor springt aus der Subroutine raus auf die „Private Sub…“. Schreibe ich statt „_Click()“ die Routine als „_change()“, passiert dasselbe, was mir in diesem Fall einleuchtet (bei _Click leuchtet es mir nicht ein).

Kennt jemand den Trick, die Textboxen alle auf false zu setzen, bevor true gesetzt wird?

wäre mir auch neu das schleifen funktionieren…(ausser C all O f D uty)… am pc mit cods…uknow what i mean…
ist nur logisch…

du solltest noch mal von vorne beginnen und nicht alle 6 CB bindn bei deinem (was auch immer das wird) versuch…

du willst ja nur eine true und die anderen naja untrue…

viel glück…!

OptionButtons ?
Hallo Pauli,

müssen es denn unbedingt CheckBoxen sein, oder könntest du auch OptionButtons nehmen? Die machen das ja automatisch, dass immer nur einer gewählt sein kann.

Gruß, Andreas

Hallo Andreas,

danke für Deinen Tip. Das mit den OptionButtons werde ich mir mal ansehen.
Inzwischen habe ich eine Lösung gefunden, die zwar nicht elegant ist, die aber funktioniert.

Bei inzwischen 8 Checkboxen habe ich bei jedem Code der Checkbox 7 Anweisungen geschrieben, z.B. bei Checkbox 1:

Private Sub CheckBox1_Click()
CheckBox2.Value = False
CheckBox3.Value = False
CheckBox4.Value = False
CheckBox5.Value = False
CheckBox6.Value = False
CheckBox7.Value = False
CheckBox8.Value = False
End Sub

Da beim Klick auf den Button die CB1 selber true oder false setzt, fehlt jeweils die Anweisung für die betreffende Box.

Gruß
Pauli

Hallo Pauli,

ich habe in einer Userform 6 Checkboxen mit der Eigenschaft
value=false.
Ich möchte nur 1x true haben, d.h. wenn Checkbox1 als true
markiert ist und Checkbox2 bei einem weiteren Klick ebenfalls
markiert (value=true) wird, soll die Markierung von Checkbox1
wieder verschwinden.

wie Andreas schon sagt, nimm Optionsbutton. Da kann man das schon so bauen daß beim Mappenstart immer nur ein Optionsbutton True ist. Klickst du einen anderen an wird nur der True.

Aber willst du das? Ich kenne Situationen da will man das grad nicht.
Also man will auch die Situation haben daß keiner der Buttons true sein soll.

Antworte mal bitte dazu.
Und, wie auch immer, ich kann dir auch Code basteln a la
Private Sub Checkbox1_Click()
Call xyz(…)
end sub

Private Sub Checkbox2_Click()
Call xyz(…)
end sub

D,h. in jedem Klickereignis wird die gleiche Subprozedur aufgerufen.

Geht sogar noch besser, da brauchste gar nicht da 8 Prozeduren für die 8 Checkboxen zu schreiben, aber das lasse ich ma weg.

(leider habe ich vergessen, wie die Anweisung heißt, um hier
Code correkt einzutragen)

Das ist der pre-Tag.
Variante 1, du kopierst hier deinen formatierten Code rein, markierst ihn und klickst „oben“ auf „pre“-Button.
Variante2, du klickst „oben“ zweimal nacheinder auf den pre-Tag, dann fügst du deinen Code zwischen die beiden pre-Tags ein.
Variante3, du schreibst den pretag selbst hin.

Der Code funktioniert nicht. Im Debugger habe ich gesehen,
daß, wenn checkbox.value gesetzt wird, der Cursor in die
Überschrift „Private Sub Checkbox…“ springt.

Ich nehme an, Value=false ist wie Klick auf den Button, deshalb reagiert der Ereignis-Code.
Abhilfe wäre in deinem Code application.enableevents=False/true zu benutzen.

Gruß
Reinhard

Hallo Reinhard,

danke für Deine Antwort.
Eigentlich kann ich das auch viel einfacher machen, mit normalen Befehlsschaltflächen.

Ich möchte lediglich per Makromenü eine Excel-Tabelle nach auszuwählenden Spalten sortieren. Diese von mir genannten 8 Checkboxen sollen nur die Auswahl darstellen. Per Startknopf wird dann die Sortierung gestartet.
Einfacher ist es, gleich die entsprechende Taste zu drücken, weil da nur 1 Klick reicht.

Inzwischen ist das mit den Checkboxen eher zu einem akademischen Problem geworden, da ich nun wissen wollte, wie sowas mit dem „false-setzen“ gemacht wird.

Ich denke, damit hat sich das erledigt.

Herzlichen Dank nochmal
Gruß
Pauli