Autor
|
Thema: Checkbox führt zum Absturz (4166 mal gelesen)
|
Frank88 Mitglied
Beiträge: 153 Registriert: 11.10.2004
|
erstellt am: 19. Okt. 2007 14:30 <-- editieren / zitieren --> Unities abgeben:
Hallo, heute ist wohl nicht mein Tag. Habe zwei Checkboxen auf einer UserForm. Eins davon ist immer aktiv, eins wird durch andere Einstellungen aktiviert. Es soll aber trotzallem nur eins angeklickt werden können. Mein Code: Private Sub CheckBox1_Click() If CheckBox2.Enabled = True Then If CheckBox1.Value = True Then CheckBox1.Value = False CheckBox2.Value = True Else CheckBox1.Value = True CheckBox2.Value = False End If Else CheckBox1.Value = True End If End Sub Private Sub CheckBox2_Click() If CheckBox2.Enabled = True Then If CheckBox2.Value = False Then CheckBox2.Value = True CheckBox1.Value = False Else CheckBox2.Value = False CheckBox1.Value = True End If End If End Sub Klicke ich damit auf die aktivierte, nicht selektierte Checkbox hängt sich Excel auf ---> in der Titelleiste der UserForm steht dann: "Titelblabla (Keine Rückmeldung)" Beenden über rechten Mausklick auf Excel in der Taskleiste, Schließen und "Sofort beenden". Kann's das geben? Ich meine nein! Das ist simpelster Code, ohne weitere Abhängigkeiten. Ich glaub, ich mach jetzt Wochenende... Gruß, Frank
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 19. Okt. 2007 14:50 <-- editieren / zitieren --> Unities abgeben: Nur für Frank88
Hallo Frank, nach dem ersten Lesen bin ich etwas verwirrt. Zitat: If CheckBox1.Value = True Then CheckBox1.Value = False
Wenn Box1 den Wert Wahr hat (aktiv ist), dann soll sie nicht aktiv werden? . Wann hängt sich Excel auf (Breakpoint / Einzelschritt F8)? Code: Es soll aber trotzallem nur eins angeklickt werden können
Vielleicht ist der RadioButton das, was Du suchst? Gruppierungen beachten!Bin mal gespannt (und noch nicht ganz im WE). Frederik ------------------ DIN1055.de | Lastannahmen für Anwender Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Frank88 Mitglied
Beiträge: 153 Registriert: 11.10.2004
|
erstellt am: 19. Okt. 2007 15:38 <-- editieren / zitieren --> Unities abgeben:
Hallo Frederik, bin auch noch nicht im WE. Ja, genau. Das ganze soll funktionieren, wie eine Gruppe OptionButtons. Das heißt, es darf von beiden nur einer aktiv sein. Demzufolge: Ist eins aktiv und es wird drauf geklickt, muß es inaktiv werden und das andere soll das Häkchen bekommen. Das Ganze mache ich so aus optischen Gründen. I n der UserForm sind schon ein paar OptionButtons. Deren Aktivierung führt dann zu zwei Auswahlmöglichkeiten (hin und wieder auch nur eine. In dem Fall ist dann die zweite .Enabled=False), die halt dann mit Häkchen ausgewählt werden sollen. Die Idee mit Breakpoint setzen werde ich noch mal versuchen, fürchte aber, das bringt nix, weil ja Excel sich aufhängt. Dann kann man auch nicht mehr auf's Projekt zugreifen. Gruß, Frank
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 19. Okt. 2007 16:03 <-- editieren / zitieren --> Unities abgeben: Nur für Frank88
|
Frank88 Mitglied
Beiträge: 153 Registriert: 11.10.2004
|
erstellt am: 19. Okt. 2007 16:06 <-- editieren / zitieren --> Unities abgeben:
Hallo Frederik (und an alle, die eventuell noch mitlesen), die Idee mit Breakpoint war super. Da sieht man dann nämlich, daß aus der Sub für Checkbox2 beim Setzen von Checkbox1.value = False oder auch Checkbox1.value = True in die 'Private Sub CheckBox1_Click()' gesprungen wird. Das führt dann zu 'ner Endlosschleife, ganz klar. Wobei doch die Sub '...Click()' heißt und nicht '...Change()'! Das macht mich alles so fertig! Und deshalb gehe ich jetzt doch ins WE. Bis Montag. Vielleicht kann ich dann neues berichten. Oder es ist jemandem was eingefallen. Gruß, Frank
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Frank88 Mitglied
Beiträge: 153 Registriert: 11.10.2004 Civil3D 2018
|
erstellt am: 19. Okt. 2007 16:10 <-- editieren / zitieren --> Unities abgeben:
Hallo Paulchen, Dein Einwand ist berechtigt. Aber was glaubst Du, wieviele Anwender aus lauter Langeweile auf's falsche Kästchen klicken? Oder man hat nicht richtig gezielt. Oder man will vielleicht doch beide aktiv bzw. inaktiv haben, obwohl das absehbar zu Problemen führt und vom Ersteller der Tabelle auch ausdrücklich gesagt wurde... Für manche ist einfach immer Freitag und denen will ich soweit es geht helfen. Zu dem Thema Click() und Change() siehe mein anderes Posting. Da gibt's wohl keinen Unterschied bei einer Checkbox. Gruß, Frank
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 20. Okt. 2007 13:02 <-- editieren / zitieren --> Unities abgeben: Nur für Frank88
Hallo Frank, nun mit etwas mehr Ruhe. Ich fasse mal zusammen, wie ich das bisher verstanden habe. Zunächst die Grundlage: Mit Checkboxen (Kürzel: chk) meine ich die Dinger mit dem Häkchen, Mehrfach- oder keine Auswahl möglich; OptionButtons (Kürzel: opt) sind die runden Teile, wovon immer nur eins innerhalb einer Gruppe aktiv sein kann - und sinnvollerweise auch aktiv sein muß. Die anderen werden entsprechend ausgeschaltet (false). Besonders hilfreich finde ich das Einstiegs-Tutorial von Alexandra von Cube (pdf). Die Hilfe zu diesen Elementen in Excel 2003 (zu Hause): Zitat: [...] Verwenden Sie ein Kontrollkästchen-Steuerelement (CheckBox), um dem Benutzer die Wahl zwischen zwei Werten wie Ja/Nein, True/False oder Ein/Aus zu geben.Die Standardeigenschaft für das Kontrollkästchen-Steuerelement ist die Value-Eigenschaft. [...] Verwenden Sie ein Optionsfeld-Steuerelement (OptionButton), um anzuzeigen, ob ein einzelnes Element innerhalb einer Gruppe ausgewählt wurde. Beachten Sie, dass sich die Optionsfeld-Steuerelemente innerhalb eines Rahmen-Steuerelements (Frame) gegenseitig ausschließen. Die Standardeigenschaft für das Optionsfeld-Steuerelement ist die Value-Eigenschaft. [...]
Das .value kannst Du weglassen, da es die Standardeigenschaft der CheckBox ist. Es schadet zwar nicht, verkürzt aber den Code und damit die Lesbarkeit für das menschliche Auge. Manchmal ist weniger mehr ;-). Dein Anfangsproblem habe ich nachvollzogen - sobald Du eine Checkbox änderst, wird der anderen erzählt, sie sei nun auch betätigt worden. Du simulierst (oder besser: erwzingst) ein _Click-Ereignis. Was mich eingangs so verwirrt hat, bestätigt sich im Debug-Modus: Die Box ist in Deinem Code "gleichzeitig" True und False - da würde ich mich auch aufhängen . Àpropos: Wieder mal die Hilfe Zitat: Fortsetzen der Ausführung von CodeSo halten Sie die Ausführung manuell an 1. Wählen Sie im Menü Ausführen den Befehl Unterbrechen (STRG+PAUSE), oder verwenden Sie die Symbolleistenschaltfläche...
Breakpoint: Klick' mal in der VBA-Entwicklungsumgebung in die Leiste direkt links vom Code. Da sollte so ein roter Punkt auftauchen. Alternativ: Taste F9 in der Zeile, in der Du halten möchtest; noch alternativer: Menü Debuggen - Haltepunkt ein/aus. Dieser Vorschlag schaltet zwischen den Checkboxen 1 und 2 hin und her - egal, welche gerade aktiv ist. Auch das ist im Einzelschritt-Modus höchst interessant: Es laufen immer beide Routinen! Mag sein, das es elegantere oder "sauberere" Lösungen hierfür gibt. Diese funktioniert jedenfalls. Code: 'Für die, bei denen immer Freitag ist ;-)Private Sub UserForm_Initialize() CheckBox1 = True 'Beim Einblenden aktiv UserForm1.Show 'Zeig's mir! End Sub Private Sub CheckBox1_Change() If CheckBox1 = True Then CheckBox2 = False Else: CheckBox2 = True End If End Sub Private Sub CheckBox2_Change() If CheckBox2 = True Then CheckBox1 = False Else: CheckBox1 = True End If End Sub
Wolltest Du sowas erreichen? Die Enabled-etc.-Geschichten darfst Du selbst steuern - zumal ich Deine Userform und die Hintergründe nicht kenne .Angenehmen Start in die Woche, Frederik
------------------ DIN1055.de | Lastannahmen für Anwender Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Frank88 Mitglied
Beiträge: 153 Registriert: 11.10.2004
|
erstellt am: 22. Okt. 2007 09:19 <-- editieren / zitieren --> Unities abgeben:
Hallo Frederik, so fängt die Woche gut an. Möglicherweise bleibt's bei 5 Tagen Montag... Ich verstehe zwar nicht, warum es mit dem Change-Ereignis klappt und mit dem Click-Ereignis nicht (ich hätte es eher andersrum erwartet) aber das ist mir jetzt auch wurscht und eine Lehre. Der ganze Rest für die Userform hat schon funktioniert. Nur eben die finale Auswahl der Alternativen nicht. Wie ich schon geschrieben hatte, ist mir schon klar, daß hier Optionbuttons eher am Platz gewesen wären. Aber aus optischen Gründen hatte ich mich für die Checkboxen entschieden. Hintergrund: Hier werden Meßausrüstungen konfiguriert. Der Benutzer klickt an, was gemacht werden soll (zwischen 8 und 10 Kriterien mit 2 oder 3 Optionen). Daraus ergibt sich die zu verwendende Meßausrüstung. Oder in Einzelfällen auch eine Zweite. Da aber im Anschluß das System entsprechend konfiguriert werden muß (COM-Einstellungen, Datenformate, etc.), kann auch nur eine Konfiguration letztendlich verwendet werden. Entscheidet sich der Anwender also für eine, muß die Alternative inaktiv werden. Gruß, Frank
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 22. Okt. 2007 10:24 <-- editieren / zitieren --> Unities abgeben: Nur für Frank88
Danke für die Hintergrundinfos! Hm... Zitat: Ich verstehe zwar nicht, warum es mit dem Change-Ereignis klappt und mit dem Click-Ereignis nicht...
Klappt auch ;-). Bei Dir lag es an der Mach-Wahr-Wenn-Falsch-Und-Umgekehrt-Endlos-Schleife und nicht am _Click- oder _Change-Ereignis. Auch hier hilft wieder die VBA-Hilfe zum Thema CheckBox - besonders die Ereignisse. Im Fall der chk ändert (auch) der Klick den Wert. Letztlich zweitrangig, Hauptsache, es funktioniert. Frederik ------------------ DIN1055.de | Lastannahmen für Anwender Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|