Anzeige
Archiv - Navigation
1332to1336
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
Inhaltsverzeichnis

If Verschachtelung in VBA

If Verschachtelung in VBA
19.10.2013 08:54:50
Martin
Durchmesser1ComboBox.Style = fmStyleDropDownList
Durchmesser1ComboBox.Clear
Hallo alle miteinander,
ich möchte gerne in VBA 2 IF-Funktionen verschachteln aber es funktioniert leider nicht. Wenn in der VBM1Combobox Klammern ausgewählt werden, dann sollen in der Durchmesser1Combobox die hinterlegten Werte im Worksheet wsL gelistet werden und bei Nägel entsprechend andere Werte. Aber er zeigt mir leider gar nichts an.
Später müsste ich dann noch einbauen das auch frei wählbare Werte in die Durchmesser1Combobox eingegeben werden können.
If VBM1ComboBox = "Klammern" Then
LoLetzte = wsL.Cells(Rows.Count, 8).End(xlUp).Row
For c = 2 To LoLetzte
With Durchmesser1ComboBox
.AddItem wsL.Cells(c, 8)
End With
Next c
If VBM1ComboBox = "Nägel" Then
LoLetzte = wsL.Cells(Rows.Count, 9).End(xlUp).Row
For c = 2 To LoLetzte
With Durchmesser1ComboBox
.AddItem wsL.Cells(c, 9)
End With
Next c
End If
End If
Hoffe der Sachverhalt ist verständlich geschildert.

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: If Verschachtelung in VBA
19.10.2013 11:12:26
Schließer
Hallo
so wie du es aufgebaut hast, würde der Vergleich nach "Nägel" nur ausgeführt, wenn vorher "Klammern" ausgewählt worden wäre...
so ? (ungeprüft)

If VBM1ComboBox = "Klammern" Then
LoLetzte = wsL.Cells(Rows.Count, 8).End(xlUp).Row
For c = 2 To LoLetzte
With Durchmesser1ComboBox
.AddItem wsL.Cells(c, 8)
End With
Next c
ElseIf VBM1ComboBox = "Nägel" Then
LoLetzte = wsL.Cells(Rows.Count, 9).End(xlUp).Row
For c = 2 To LoLetzte
With Durchmesser1ComboBox
.AddItem wsL.Cells(c, 9)
End With
Next c
End If
Gruß UweD

diverse Varianten
19.10.2013 11:32:51
Erich
Hi Martin,
schau dir mal diese Varianten an:

Option Explicit
Private Sub VBM1ComboBox_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim wsL As Worksheet, lngL As Long, spa As Long, cc As Long
Set wsL = Sheets(1)              ' testhalber
' neuer Code4
Select Case VBM1ComboBox
Case "Klammern":   spa = 8
Case "Nägel":      spa = 9
End Select
If spa > 0 Then
With wsL
lngL = .Cells(.Rows.Count, spa).End(xlUp).Row - 1
Durchmesser1ComboBox.List = _
Application.Transpose(.Cells(2, spa).Resize(lngL))
End With
Else
Durchmesser1ComboBox.Clear
End If
Exit Sub
' neuer Code3
Durchmesser1ComboBox.Clear
Select Case VBM1ComboBox
Case "Klammern":   spa = 8
Case "Nägel":      spa = 9
End Select
If spa > 0 Then
lngL = wsL.Cells(Rows.Count, spa).End(xlUp).Row
For cc = 2 To lngL
Durchmesser1ComboBox.AddItem wsL.Cells(cc, spa)
Next cc
End If
Exit Sub
' neuer Code2
Durchmesser1ComboBox.Clear
If VBM1ComboBox = "Klammern" Then
lngL = wsL.Cells(Rows.Count, 8).End(xlUp).Row
For cc = 2 To lngL
With Durchmesser1ComboBox
.AddItem wsL.Cells(cc, 8)
End With
Next cc
ElseIf VBM1ComboBox = "Nägel" Then
lngL = wsL.Cells(Rows.Count, 9).End(xlUp).Row
For cc = 2 To lngL
Durchmesser1ComboBox.AddItem wsL.Cells(cc, 9)
Next cc
End If
Exit Sub
' neuer Code1
Durchmesser1ComboBox.Clear
If VBM1ComboBox = "Klammern" Then
lngL = wsL.Cells(Rows.Count, 8).End(xlUp).Row
For cc = 2 To lngL
Durchmesser1ComboBox.AddItem wsL.Cells(cc, 8)
Next cc
End If
If VBM1ComboBox = "Nägel" Then
lngL = wsL.Cells(Rows.Count, 9).End(xlUp).Row
For cc = 2 To lngL
Durchmesser1ComboBox.AddItem wsL.Cells(cc, 9)
Next cc
End If
Exit Sub
' alter Code
If VBM1ComboBox = "Klammern" Then
lngL = wsL.Cells(Rows.Count, 8).End(xlUp).Row
For cc = 2 To lngL
With Durchmesser1ComboBox
.AddItem wsL.Cells(cc, 8)
End With
Next cc
If VBM1ComboBox = "Nägel" Then ' 
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
diverse Varianten - neue Ausgabe
19.10.2013 11:38:11
Erich
Hi Martin,
sorry, beim letzten Post waren noch einige Ungereimtheiten drin. Also noch einmal:

Option Explicit
Private Sub VBM1ComboBox_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim wsL As Worksheet, lngL As Long, spa As Long, cc As Long
Set wsL = Sheets(1)              ' testhalber
' neuer Code4
Select Case VBM1ComboBox
Case "Klammern":   spa = 8
Case "Nägel":      spa = 9
End Select
If spa > 0 Then
With wsL
lngL = .Cells(.Rows.Count, spa).End(xlUp).Row - 1
Durchmesser1ComboBox.List = _
Application.Transpose(.Cells(2, spa).Resize(lngL))
End With
Else
Durchmesser1ComboBox.Clear
End If
Exit Sub
' neuer Code3
Durchmesser1ComboBox.Clear
Select Case VBM1ComboBox
Case "Klammern":   spa = 8
Case "Nägel":      spa = 9
End Select
If spa > 0 Then
With wsL
lngL = .Cells(.Rows.Count, spa).End(xlUp).Row
For cc = 2 To lngL
Durchmesser1ComboBox.AddItem .Cells(cc, spa)
Next cc
End With
End If
Exit Sub
' neuer Code2
Durchmesser1ComboBox.Clear
If VBM1ComboBox = "Klammern" Then
lngL = wsL.Cells(wsL.Rows.Count, 8).End(xlUp).Row
For cc = 2 To lngL
With Durchmesser1ComboBox
.AddItem wsL.Cells(cc, 8)
End With
Next cc
ElseIf VBM1ComboBox = "Nägel" Then
lngL = wsL.Cells(wsL.Rows.Count, 9).End(xlUp).Row
For cc = 2 To lngL
Durchmesser1ComboBox.AddItem wsL.Cells(cc, 9)
Next cc
End If
Exit Sub
' neuer Code1
Durchmesser1ComboBox.Clear
If VBM1ComboBox = "Klammern" Then
lngL = wsL.Cells(wsL.Rows.Count, 8).End(xlUp).Row
For cc = 2 To lngL
Durchmesser1ComboBox.AddItem wsL.Cells(cc, 8)
Next cc
End If
If VBM1ComboBox = "Nägel" Then
lngL = wsL.Cells(Rows.Count, 9).End(xlUp).Row
For cc = 2 To lngL
Durchmesser1ComboBox.AddItem wsL.Cells(cc, 9)
Next cc
End If
Exit Sub
' alter Code
If VBM1ComboBox = "Klammern" Then
lngL = wsL.Cells(Rows.Count, 8).End(xlUp).Row
For cc = 2 To lngL
With Durchmesser1ComboBox
.AddItem wsL.Cells(cc, 8)
End With
Next cc
If VBM1ComboBox = "Nägel" Then ' 
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: diverse Varianten - neue Ausgabe
20.10.2013 06:09:35
Martin
Die Lösungsvarianten haben leider nicht zum Ziel geführt. Ich kann weiterhin nur zwischen "Klammern" und "Nägel" auswählen, aber nicht die passenden Durchmesser.

lad doch bitte die Mappe hoch... owT
20.10.2013 06:28:20
Matthias

AW: diverse Varianten - neue Ausgabe
20.10.2013 19:52:02
Erich
Hi Martin,
angesichts der vielen Varianten ist dir sicher nicht aufgefallen, dass mein Code in einer Prozedur
"VBM1ComboBox_Exit(...)" stand - jedenfalls nicht in der "UserForm_Initialize()".
Das ist entscheidend.
In dem Moment, in dem UserForm_Initialize läuft, ist überhaupt noch nicht bekannt, ob der User
Klammern oder Nägel wählt.
Das Durchmesser-Angebot kann erst nach dieser Wahl aus "Liste" geholt werden.
Das passende Ereignis dafür ist VBM1ComboBox_Exit - dann verlässt der User die Klammern/Nägel-Wahl.
Diverse Namen in der Mappe habe ich gelöscht, weil sie sich auf andere, unbekannte Mappen beziehen.
Das Blatt "Ausgabe Nä+Kl" wurde hier auch nicht gebraucht.
Die UserForm "DatenEingabe" habe ich umbenannt in "frm_DatenEingabe".
Dann heißt sich nicht mehr genauso wie der Button "DatenEingabe" im Blatt "Eingabe Nä+Kl".
Solchen Objekten sollte man immer unterschiedliche Namen geben.
Im Code hast du überall die ComboBox-Style-Eigenschaft auf "fmStyleDropDownList" eingestellt.
Warum im Code? Das kannst du besser einmalig und dauerhaft im VBA-Editor tun.
Hier die Mappe - viel Spaß damit und viel Erfolg!
https://www.herber.de/bbs/user/87718.xlsm
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: diverse Varianten - neue Ausgabe
21.10.2013 14:41:41
Martin
Vielen Dank Erich,
deine Lösung funktioniert einwandfrei.
Da ich absoluter Anfänger bin in Sachen VBA taste ich mich da Stück für Stück vor.
Gruß Martin

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige