Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Checkbox in Abhängigkeit eines Eintrages aus einer Combobox aktivieren

296 views
Skip to first unread message

Ralf Gläßer

unread,
Jun 14, 2006, 12:09:02 PM6/14/06
to
Halloli :-)

Ich habe in einem Userform eine gefüllte Combobox. Die Daten dazu kommen
aus Arbeitsblatt "Daten" aus Spalte A.
Nun will ich eine Checkbox in diesem Userform aktivieren lassen, wenn
für den Eintrag in der Combobox im Blatt "Daten" Spalte C eine 1 steht
und die Checkbox deaktivieren lassen, wenn in Spalte C eine 2 steht.

Zusätzlich soll in einer Textbox in dem Userform der Wert aus Spalte B
angezeigt werden.

Also:
"A" "B" "C"
name1 10 1
name2 8 1
name3 15 2
name4 11 1


Combobox Checkbox Textbox
name2 aktiv 8

Combobox Checkbox Textbox
name3 inaktiv 15

Wie kriege ich das hin?
Bitte einen Lösungsvorschlag.

Tschüß
Ralf

Herbert Taferner

unread,
Jun 14, 2006, 12:24:36 PM6/14/06
to
Hallo Ralf,

> Combobox Checkbox Textbox
> name3 inaktiv 15
>
> Wie kriege ich das hin?
> Bitte einen Lösungsvorschlag.

ich würde der Einfachheit halber die ComboBox 3-spaltig füllen
und dann kannst du bequem auf die anderen Werte zugreifen


mfg Herbert


Herbert Taferner

unread,
Jun 14, 2006, 1:00:05 PM6/14/06
to

Hallo Ralf,

als Beispiel

' Code zum füllen der Box 3-spaltig
'----------------------
Sub füllen()
Dim i As Long
i = 1
With UserForm1.ComboBox1
.Clear
Do While ActiveSheet.Cells(i, 1) <> ""
.AddItem ActiveSheet.Cells(i, 1).Value ' erste Spalte
.List(i - 1, 1) = ActiveSheet.Cells(i, 2).Value ' zweite Spalte
.List(i - 1, 2) = ActiveSheet.Cells(i, 3).Value ' dritte Spalte
i = i + 1
Loop
.ListIndex = 0
End With
End Sub
'----------------------
' Code in die UserForm
'----------------------
Private Sub ComboBox1_Change()
With ComboBox1
If .List(.ListIndex, 2) <> 1 Then ' dritte Spalte
CheckBox1.Value = 0
Else
CheckBox1.Value = 1
End If

TextBox1.Text = .List(.ListIndex, 1) ' zweite Spalte
End With

End Sub
'----------------------

mfg Herbert


Ralf Gläßer

unread,
Jun 14, 2006, 1:32:47 PM6/14/06
to
Hallo Herbert,

funktioniert gut,
nur im Userform steigt das Makro aus, wenn ich mich in der Combobox
bewege. z.B. wenn ich alle Zeichen von rechts beginnend lösche kommt
nach dem letzten zeichen ein LZF 381, Eigenschaft List konnte nicht
abgerufen werden. Index des Eigenschaftenfelds ungültig. Selbiges
passiert, wenn ich über die Tastatur eingebe. Beim Debuggen springt er
siehe unten.

> '----------------------
> ' Code in die UserForm
> '----------------------
> Private Sub ComboBox1_Change()
> With ComboBox1


-------------------------hierher------------


> If .List(.ListIndex, 2) <> 1 Then ' dritte Spalte

--------------------------------------------


> CheckBox1.Value = 0
> Else
> CheckBox1.Value = 1
> End If
>
> TextBox1.Text = .List(.ListIndex, 1) ' zweite Spalte
> End With
>
> End Sub
> '----------------------

Tschüß
Ralf

Herbert Taferner

unread,
Jun 14, 2006, 1:39:02 PM6/14/06
to
Hallo Ralf,

> funktioniert gut,
> nur im Userform steigt das Makro aus, wenn ich mich in der Combobox bewege.
> z.B. wenn ich alle Zeichen von rechts beginnend lösche kommt nach dem letzten
> zeichen ein LZF 381, Eigenschaft List konnte nicht abgerufen werden. Index des
> Eigenschaftenfelds ungültig. Selbiges passiert, wenn ich über die Tastatur
> eingebe. Beim Debuggen springt er siehe unten.

du hast ja auch geschrieben die Daten kommen aus Spalte A der Tabelle
und nicht dass du die in der Userform verändern willst

wenn du schreibst was du wirklich möchtest dann sehen wir weiter

mfg Herbert


Ralf Gläßer

unread,
Jun 14, 2006, 2:03:19 PM6/14/06
to
Hallo Herbert

> du hast ja auch geschrieben die Daten kommen aus Spalte A der Tabelle
> und nicht dass du die in der Userform verändern willst

Verändern will ich die Daten dort auch nicht.
Mit der Bewegung in der Combobox meinte ich folgenden Sachverhalt.
Wenn ich den Focus auf der Box habe und einen Buchstaben eingebe, dann
sollte doch eigentlich das erste passende Wort aus der Combobox
angezeigt werden. Das könnte z.B. L für Löffel sein. Nun merkt der User
des Forms aber, das er nicht den Löffel sondern die Gabel meinte. Weil
er nun aber gerade keine Maus hat um den Scrollbalken zu bedienen,
löscht er alle Buchstaben von Löffel. Wenn er dann auch noch das L
gelöscht hat, kommt der LZF und das Makro steigt aus.

> wenn du schreibst was du wirklich möchtest dann sehen wir weiter

Deine Lösung geht schon in die Richtung wo ich hinwill.
Mir ist jetzt auch die Auswertung der Werte aus Spalte B und C klar.
Nur möchte ich eben nicht den Makroabbruch, wenn einer mit Tastatur das
Teil bedient.

Tschüß
Ralf

Herbert Taferner

unread,
Jun 14, 2006, 2:42:29 PM6/14/06
to
Hallo Ralf,

> Verändern will ich die Daten dort auch nicht.
> Mit der Bewegung in der Combobox meinte ich folgenden Sachverhalt.
> Wenn ich den Focus auf der Box habe und einen Buchstaben eingebe, dann sollte
> doch eigentlich das erste passende Wort aus der Combobox angezeigt werden. Das
> könnte z.B. L für Löffel sein. Nun merkt der User des Forms aber, das er nicht
> den Löffel sondern die Gabel meinte. Weil er nun aber gerade keine Maus hat um
> den Scrollbalken zu bedienen, löscht er alle Buchstaben von Löffel. Wenn er
> dann auch noch das L gelöscht hat, kommt der LZF und das Makro steigt aus.
>
>> wenn du schreibst was du wirklich möchtest dann sehen wir weiter
>
> Deine Lösung geht schon in die Richtung wo ich hinwill.
> Mir ist jetzt auch die Auswertung der Werte aus Spalte B und C klar.
> Nur möchte ich eben nicht den Makroabbruch, wenn einer mit Tastatur das Teil
> bedient.

versuchs mal so
damit wird das auslesen solange ignoriert bis wieder ein vorhandener
Teil eines Eintrags vorhanden ist

'---------------


Private Sub ComboBox1_Change()
With ComboBox1

On Error GoTo Err


If .List(.ListIndex, 2) <> 1 Then ' dritte Spalte

CheckBox1.Value = 0
Else
CheckBox1.Value = 1
End If

TextBox1.Text = .List(.ListIndex, 1) ' zweite Spalte

Exit Sub
Err:
CheckBox1.Value = 0
TextBox1.Text = ""
End With
End Sub
'-------------

mfg Herbert


Ralf Gläßer

unread,
Jun 15, 2006, 10:18:07 AM6/15/06
to
Hallo Herbert

> versuchs mal so
> damit wird das auslesen solange ignoriert bis wieder ein vorhandener
> Teil eines Eintrags vorhanden ist
>
> '---------------
> Private Sub ComboBox1_Change()
> With ComboBox1
> On Error GoTo Err
> If .List(.ListIndex, 2) <> 1 Then ' dritte Spalte
> CheckBox1.Value = 0
> Else
> CheckBox1.Value = 1
> End If
>
> TextBox1.Text = .List(.ListIndex, 1) ' zweite Spalte
> Exit Sub
> Err:
> CheckBox1.Value = 0
> TextBox1.Text = ""
> End With
> End Sub
> '-------------

So klappts.
Danke
Übrigens .... Fußball.... gewonnen :-))))))))))))))

Nebenbei habe ich wiedermal gemerkt, das ich eigentlich nur
Grundkenntnisse von den Grundkenntnissen habe ;-)
Umso mehr freue ich mich immer über schnelle kompetente Hilfe.
Also nochmals Danke.

Zum Abschluss noch eine Frage zum Verständnis.
Bis jetzt hatte ich immer die verschiedenen Codes folgendermaßen
untergebracht:
1. Aufruf der Userform über die "show"-Anweisung in einem normalen "Modul"
2. Initialisierung des Userforms im Code des "Formulars"
Private Sub userform_initialize()...
3. Reaktionen auswerten im Code des "Formulars"
Private Sub ComboBox1_Change()

Wenn ich dich richtig verstanden habe (erste Mail) und es funktioniert
ja auch, dann initialisierst du das Userform in einem normalen "Modul"
und wertest nur Reaktionen im "Formular" aus.

Gibts eigentlich dafür ne optimale Variante oder ist das eigentlich
Brust.....?

Tschüß
Ralf

Herbert Taferner

unread,
Jun 15, 2006, 11:21:52 AM6/15/06
to
Hallo Ralf,

> So klappts.
> Danke
> Übrigens .... Fußball.... gewonnen :-))))))))))))))

aber nur mit hängen und würgen, aber wie bei den deutschen
meistens mit viel Glück in den letzten Minuten

> Nebenbei habe ich wiedermal gemerkt, das ich eigentlich nur Grundkenntnisse
> von den Grundkenntnissen habe ;-)
> Umso mehr freue ich mich immer über schnelle kompetente Hilfe.
> Also nochmals Danke.

Bitte gern !

> Zum Abschluss noch eine Frage zum Verständnis.
> Bis jetzt hatte ich immer die verschiedenen Codes folgendermaßen
> untergebracht:
> 1. Aufruf der Userform über die "show"-Anweisung in einem normalen "Modul"

du kannst Sie ja auch schon beim öffnen der Datei starten, oder
durch irgend ein Ereignis in einem Blatt oder, oder...

> 2. Initialisierung des Userforms im Code des "Formulars"
> Private Sub userform_initialize()...

das kommt drauf an was du mit oder in der Form alles machst
und was geladen bzw. angezeigt oder ausgewertet werden soll

> 3. Reaktionen auswerten im Code des "Formulars"
> Private Sub ComboBox1_Change()

ja da kannst du nicht weg,
da musst du auf Ereignisse reagieren wo sie entstehen

> Wenn ich dich richtig verstanden habe (erste Mail) und es funktioniert ja
> auch, dann initialisierst du das Userform in einem normalen "Modul" und
> wertest nur Reaktionen im "Formular" aus.
>
> Gibts eigentlich dafür ne optimale Variante oder ist das eigentlich
> Brust.....?

muss nicht Brust.... sein kann auch Geschmack sein,
wie im richtigen Leben der eine schwört auf das der andere auf das

aber ließ dir einmal den Bericht einer Spielerei von Peter
http://www.online-excel.de/excel/singsel_vba.php?f=74

bzw. da sind noch viele gute Beispiele für VBA auf seiner Seite

mfg Herbert


Ralf Gläßer

unread,
Jun 15, 2006, 11:37:12 AM6/15/06
to
Hallo Herbert

> muss nicht Brust.... sein kann auch Geschmack sein,
> wie im richtigen Leben der eine schwört auf das der andere auf das

Prinzip verstanden


> aber ließ dir einmal den Bericht einer Spielerei von Peter
> http://www.online-excel.de/excel/singsel_vba.php?f=74

Ist schon Lesezeichen in meinem Browser ;-)


> bzw. da sind noch viele gute Beispiele für VBA auf seiner Seite

Jo
Danke nochmals
Ralf

Herbert Taferner

unread,
Jun 15, 2006, 12:02:39 PM6/15/06
to
Hallo Ralf,

> Danke nochmals

Bitte gern !

mfg Herbert


0 new messages