Anzeige
Archiv - Navigation
1404to1408
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
[VBA] Comboboxen in UserForm
25.01.2015 18:49:07
Cooper
Hi Leute,
ich erstelle gerade ein Excel-Formular. Dazu habe ich in VBA eine USerForm angelegt.
In dieser UserForm sind nun u.a. zwei ComboBoxen enthalten (im Code zu finden mit der Abkürzung "cmb").
Jetzt hätte ich gerne, dass:
Wenn in cmbVM nicht der erste Wert der Liste (.listindex0) dann soll in cmbNaegel kein Wert sichtbar sein (.Listindex=-1). Das klappt auch soweit.
Jetzt möchte ich aber auch, dass, wenn nun in cmbVM der erste Wert doch ausgewählt wird (.listindex=0), dann soll in cmbNaegel ebenfalls der erste Wert (.listindex=0) ausgewählt werden.
Ich hab das mal mit folgendem Code probiert, aber damit kommt die Fehlermeldung "laufzeitfehler 380: Eigenschaft ListIndex konnte nicht gesetzt werden. Ungültiger Eigenschaftswert."
Folgender Code steht dafür im Code der UserForm:
Private Sub UserForm_Initialize()
With Me.cmbNaegel
For Each rngNaegel In Application.Range("H.Nägel")
.AddItem rngNaegel.Value & ""
Next
.ListIndex = 0
End With
End Sub

__________
Private Sub cmbVM_Change()
With Me
If .cmbVM.ListIndex  0 Then
.cmbNaegel.ListIndex = 0
.cmbNaegel.Enabled = False
Else
.cmbNaegel.Enabled = True
.cmbNaegel.ListIndex = 0
End If
End With
End Sub

Kann mir jemand da weiterhelfen. Wäre echt super.
Vielen Dank schonmal
Liebe Grüße
Cooper

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: [VBA] Comboboxen in UserForm
25.01.2015 19:25:09
Luschi
Hallo Cooper,
dann mußt Du auch -1 extra selektieren, mach es so:

Private Sub cmbVM_Change()
Dim ok As Boolean, i As Integer
i = 0: ok = False
With Me
Select Case .cmbVM.ListIndex
Case -1: i = -1
Case 0:
Case Else : ok = True
End Select
.cmbNaegel.ListIndex = i
.cmbNaegel.Enabled = ok
End With
End Sub
Gruß von Luschi
aus klein-Paris

AW: [VBA] Comboboxen in UserForm
25.01.2015 19:26:24
Matthias
Hallo
Private Sub cmbVM_Change()
With Me
.cmbNaegel.ListIndex = IIf(.cmbVM.ListIndex  0, -1, 0)
End With
End Sub
Gruß Matthias

Anzeige
hab mal ne Frage ...
25.01.2015 20:09:31
Matthias
Hallo
Warum schreibst Du eigentlich ...
.AddItem rngNaegel.Value & ""
Gruß Matthias

AW: Noch einer
25.01.2015 22:33:19
Gerd
Hallo
Private Sub cmbVM_Change()
With cmbNaegel
.ListIndex = (Abs(cmbVM.ListIndex) > 0) * 1
.Enabled = (.ListIndex = 0)
End With
End Sub
Gruß Gerd

AW: [VBA] Comboboxen in UserForm
26.01.2015 09:35:27
Cooper
Hi Leute,
vielen Dank für eure Hilfe bisher. Ich habe all eure Codes ausprobiert, aber bei allen erscheint die gleiche Fehlermeldung: laufzeitfehler 380: Eigenschaft ListIndex konnte nicht gesetzt werden. Ungültiger Eigenschaftswert."
Was hab ich denn jetzt falsch gemacht? Das Debuggen zeigt, dass es genau dann zum Laufzeitfehler kommt, wenn der ListIndex für cmBNaegel neu gesetzt wird, unabhängig davon welche Zahl man nun für den ListIndex angibt.
@Matthias L:
.AddItem rngNaegel.Value & ""

deshalb: rngNaegel ist vom Datentyp Range, gibt nun rngNaegel.value = NULL (nicht 0 sondern NULL, also ein "gar nichts") zurück, dann entsteht ein Fehler. Durch die Verkettung mit einen Leerstring "" entsteht immer mindestens eine Zeichenkette. Das ist nur eine Vorsichtsmaßnahme, zur Fehlervermeidung.
Habt ihr denn vllt eine Idee, warum der Laufzeitfehler auftritt?
Gruß, Cooper

Anzeige
AW: [VBA] Comboboxen in UserForm
26.01.2015 10:16:52
Cooper
Also ich habe den Fehler, glaube ich, gefunden:
Ich hatte vergessen noch zusätzlichen Code anzugeben:
wenn da steht:
Private Sub UserForm_Initialize()
Dim rngVM As Range
Dim rngNaegel As Range
With Me.cmbVM
For Each rngVM In Application.Range("H.Verbindungsmittelauswahl")
.AddItem rngVM.Value & ""
Next
.ListIndex = 0
End With
With Me.cmbNaegel
For Each rngNaegel In Application.Range("H.Nägel")
.AddItem rngNaegel.Value & ""
Next
.ListIndex = 0
End With
End Sub
Private Sub cmbVM_Change()
Dim intListIndexNaegel As Integer
Dim booOK As Boolean
intListIndexNaegel = 0: booOK = False
With Me
Select Case .cmbVM.ListIndex
Case Is > 0: intListIndexNaegel = -1
Case 0: booOK = True
Case Else:
End Select
.cmbNaegel.ListIndex = intListIndexNaegel
.cmbNaegel.Enabled = booOK
End With
End Sub
entsteht bei Ausführen der Prozeduren (Start des Forumlars mit F5) ein Laufzeitfehler, da die UserForm_Initialize den me.cmbVM.Listindex=0 setzt (damit direkt was vorausgewählt ist). Damit wird aber ja cmbVM geändert, sodass sofort cmbVM_Change ausgeführt wird und es entsteht ein Laufzeitfehler.
Hab mal die Prozedur von cmbVM auf cmbVM_Click geändert, aber das Problem bleibt bestehen. Wenn ich jedoch auf cmbVM_Exit stellt, läuft alles prima, aber das ist nicht das, was ich erzielen will.
Es wäre schön, wenn der Inhalt von cmbNaegel sofort bearbeitet wird, wenn in cmbVM sich was ändert.
Habt ihr da vllt eine Lösung?

Anzeige
AW: [VBA] Comboboxen in UserForm
26.01.2015 10:46:21
Cooper
Sorry, sollte ich hier rumspamen, aber vllt interessierts ja wen.
Ich habe den Code ein wenig erweitert, sodass es nun funzt:
Private Sub UserForm_Initialize()
Dim rngVM As Range
Dim rngNaegel As Range
With Me.cmbVM
For Each rngVM In Application.Range("H.Verbindungsmittelauswahl")
.AddItem rngVM.Value & ""
Next
.ListIndex = 0
End With
With Me.cmbNaegel
For Each rngNaegel In Application.Range("H.Nägel")
.AddItem rngNaegel.Value & ""
Next
.ListIndex = 0
End With
End Sub
Private Sub cmbVM_Change()
Dim intListIndexNaegel As Integer
Dim booOK As Boolean
intListIndexNaegel = 0
booOK = False
With Me
Select Case .cmbVM.ListIndex
Case -1: intListIndexNaegel = -1
Case 0:
intListIndexNaegel = 0
booOK = True
Case Else:
End Select
If intListIndexNaegel  0 Then
.cmbNaegel.ListIndex = intListIndexNaegel
Else
End If
.cmbNaegel.Enabled = booOK
End With
End Sub
Vielen Dank für eure Hilfe. Ihr habt mir einen guten Denkanstoß gegeben. Durch ein wenig rumprobieren, hab ich das Problem jetzt lösen können.
Gruß, Cooper

Anzeige
AW: [VBA] Comboboxen in UserForm
26.01.2015 14:41:24
Cooper
tja, doch noch nicht perfekt...
der aktuelle Code lautet so:

Private Sub UserForm_Initialize()
Dim rngVM As Range
Dim rngNaegel As Range
With Me.cmbVM
For Each rngVM In Application.Range("H.Verbindungsmittelauswahl")
.AddItem rngVM.Value & ""
Next
.ListIndex = 0
End With
With Me.cmbNaegel
For Each rngNaegel In Application.Range("H.Nägel")
.AddItem rngNaegel.Value & ""
Next
.ListIndex = 0
End With
End Sub
Private Sub cmbVM_Change()
Dim intListIndexNaegel As Integer
Dim booOK As Boolean
intListIndexNaegel = 0
booOK = False
With Me
Select Case .cmbVM.ListIndex
Case 0:
intListIndexNaegel = 0
booOK = True
Case Is > 0: intListIndexNaegel = -1
Case Else:
End Select
If intListIndexNaegel  0 Then
.cmbNaegel.ListIndex = intListIndexNaegel
Else
End If
.cmbNaegel.Enabled = booOK
End With
End Sub
Das Problem ist jetzt aber folgendes:
Wurde in der Combobox cmbVM z.b. der zweite wert (listindex>0) ausgewählt, dann wird wie gewünscht die Combobox cmbNaegel inaktiv und der Listindex=-1 gesetzt. Soweit so gut.
Ändert man nun aber den Eintrag in ComboBox cmbVM wieder zurück auf den ersten Wert (listindex=0), dann wird zwar die Combobox cmbNaegel wieder aktiv aber es wird nicht(!) der erste Wert angezeigt, aber genau das ist erwünscht. Der Listindex bleibt auf -1.
Hat jemand noch eine Idee?

Anzeige
AW: [VBA] Comboboxen in UserForm
26.01.2015 17:53:58
Gerd
Hallo,
kann sein, dass ich nicht deine letzte Version erwischt habe. Das Prinzip sollte für dich dennoch erkennbar sein.
Option Explicit
Dim blnChange As Boolean
Private Sub UserForm_Initialize()
Dim rngVM As Range
Dim rngNaegel As Range
blnChange = False
With Me.cmbVM
For Each rngVM In Application.Range("H.Verbindungsmittelauswahl")
.AddItem rngVM.Value & ""
Next
.ListIndex = 0
End With
With Me.cmbNaegel
For Each rngNaegel In Application.Range("H.Nägel")
.AddItem rngNaegel.Value & ""
Next
.ListIndex = 0
End With
blnChange = True
End Sub
Private Sub cmbVM_Change()
Dim intListIndexNaegel As Integer
Dim booOK As Boolean
If Not blnChange Then Exit Sub
'....................der Rest, welcher auch immer
End Sub
Gruß Gerd

Anzeige
AW: [VBA] Comboboxen in UserForm
26.01.2015 17:54:43
Tino
Hallo,
vielleicht
If intListIndexNaegel = 0 Then
Gruß Tino

319 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige