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
> 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
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
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
> 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
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
> 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
> 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
> 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
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
> Danke nochmals
Bitte gern !
mfg Herbert