Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1344to1348
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

VBA: Combobox neu laden

VBA: Combobox neu laden
03.02.2014 11:15:36
Bernd
Hallo zusammen,
habe ein Problemm, bei dem ich nicht weiterkomme. Vielleicht kann mir jemand helfen.
Auf Userform erst Combobox1 auswählen, dann Combobox2. Beim Verlassen von Combobox2 Wert Combobox2 in Sheets("Kursabfrage") ZelleB1 einfügen. Danach Comboboxen neu laden, CB1 auswählen dann CB2 und Wert CB2 und diesmal in Zelle C1 einfügen und wiederholen bis letzte Zelle F1 mit Wert gefüllt ist.
Hier mein bisheriger Code:
Option Explicit
Dim aRow As Long
Dim col As New Collection
Dim iRow, x As Long
Private Sub ComboBox1_Change()
ComboBox2.Clear
On Error Resume Next
For iRow = 2 To aRow
col.Add Cells(iRow, 2), Cells(iRow, 2)
If Err = 0 And Cells(iRow, 1) = ComboBox1.Value Then
ComboBox2.AddItem Cells(iRow, 2)
Else
Err.Clear
End If
Next iRow
On Error GoTo 0
For x = col.Count To 1 Step -1
col.Remove (x)
Next x
End Sub

Private Sub UserForm_Initialize()
Sheets("Kürzel").Activate
aRow = IIf(IsEmpty(Range("A162")), Range("A162").End(xlUp).Row, 162)
On Error Resume Next
For iRow = 2 To aRow
col.Add Cells(iRow, 1), Cells(iRow, 1)
If Err = 0 Then
ComboBox1.AddItem Cells(iRow, 1)
Else
Err.Clear
End If
Next iRow
On Error GoTo 0
Sheets("Kürzel").Select
Label1.Caption = Range("A1").Value
Label2.Caption = Range("B1").Value
End Sub

Private Sub ComboBox2_Afterupdate()
Sheets("Kursabfrage").Activate
Range("B1").Value = ComboBox2.Value
if cells(1,2) = >0 Then
Range("C1").Value = ComboBox2.Value
ElseIf
cells(1,3) = >0 Then   'usw.
'ComboBox2.Clear
'UserForm_Initialize
End Sub

Vielen Dank schon mal im Voraus!!!
Gruß
Bernd

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Combobox neu laden
03.02.2014 15:11:51
fcs
Hallo Bernd,
irgendwie passt die Logik in Combobox2_Afterupdate nicht.
Ich würde es wie folgt aufbauen, wobei die nächste Spalte für den Combobox2-Wert im Blatt Kursabfrage gesetzt wird, wenn man in die Combobox2 klickt.
Das Aktivieren der verschiedenen Blätter muss auch nicht sein und kann mit entsprechendne With-End With Blöcken vermieden werden.
Gruß
Franz
Option Explicit
Dim aRow As Long, lngSpalte As Long
Dim col As Collection
Dim iRow, x As Long
Dim wksKuerzel As Worksheet, wksKurs As Worksheet
Private Sub UpDateCombobox1()
'Auswahlliste für Combobox1 füllen
Me.ComboBox1.Clear
With wksKuerzel
aRow = IIf(IsEmpty(.Range("A162")), .Range("A162").End(xlUp).Row, 162)
Set col = New Collection
On Error Resume Next
For iRow = 2 To aRow
col.Add .Cells(iRow, 1), .Cells(iRow, 1)
If Err = 0 Then
ComboBox1.AddItem .Cells(iRow, 1)
Else
Err.Clear
End If
Next iRow
On Error GoTo 0
Set col = Nothing
Label1.Caption = .Range("A1").Value
Label2.Caption = .Range("B1").Value
End With
End Sub
Private Sub ComboBox1_Enter()
Me.ComboBox2.Clear
ComboBox2.ListIndex = -1
Call UpDateCombobox1
End Sub
Private Sub ComboBox1_Change()
ComboBox2.Clear
Set col = New Collection
On Error Resume Next
With wksKuerzel
For iRow = 2 To aRow
col.Add .Cells(iRow, 2), .Cells(iRow, 2)
If Err = 0 And .Cells(iRow, 1) = ComboBox1.Value Then
ComboBox2.AddItem .Cells(iRow, 2)
Else
Err.Clear
End If
Next iRow
End With
On Error GoTo 0
Set col = Nothing
End Sub
Private Sub ComboBox2_Change()
If ComboBox2.ListIndex = -1 Then Exit Sub
wksKurs.Cells(1, lngSpalte).Value = ComboBox2.Value
End Sub
Private Sub ComboBox2_Enter()
If Me.ComboBox1.ListIndex = -1 Then
Me.ComboBox1.SetFocus
Exit Sub
End If
lngSpalte = lngSpalte + 1 'nächste Spalte setzen wenn Comnbobox2 selektiert wird
If lngSpalte = 7 Then MsgBox "Zellen B1 bis F1 sind gefüllt"
End Sub
Private Sub UserForm_Initialize()
Set wksKuerzel = Sheets("Kürzel")
Set wksKurs = Sheets("Kursabfrage")
wksKurs.Range("B1:F1").ClearContents 'Inhalte in B1:F1 in Kursabfrage löscen
Call UpDateCombobox1
wksKurs.Activate
lngSpalte = 1 'Startwert für Ausfüllen der Spalten in Zeile 1 in  Kursabfrage
End Sub

Anzeige
AW: VBA: Combobox neu laden
03.02.2014 16:20:32
Bernd
Hallo Franz,
recht♥lichen Dank für deine Hilfe. Es funktioniert, wie ich es wollte.
irgendwie passt die Logik in Combobox2_Afterupdate nicht.
...das musst du mir etwas nachsehen. Ich bin noch ganz am Anfang, was VBA anbelangt.
Nochmals Danke ;-)
Gruß
Bernd

AW: VBA: Combobox neu laden
04.02.2014 10:44:15
Bernd
Hallo Franz,
bin nach langem Ausprobieren auf einen kleinen Fehler gestoßen. Und zwar wird bei 2maligen anklicken der CB1 ohne CB2 auszuwählen eine Zeile in der Tabelle übersprungen.
Diese Meldung kommt "If lngSpalte = 7 Then MsgBox "Zellen B1 bis F1 sind gefüllt", obwohl eine Spalte übersprungen wurde.
Die Prüfung, ob Ende erreicht ist müsste auf CB2 ausgelegt sein.
Wie muss ich den Code verändern?
Gruß
Bernd

Anzeige
AW: VBA: Combobox neu laden
04.02.2014 11:33:34
fcs
Hallo Bernd,
ich hab die Berechnung der nächsten auszufüllendne Spalte angepasst.
passe das Makro bei Eintritt in die Combobox2 an.
Gruß
Franz
Private Sub ComboBox2_Enter()
If Me.ComboBox1.ListIndex = -1 Then
Me.ComboBox1.SetFocus
Exit Sub
End If
lngSpalte = Application.WorksheetFunction.CountA(wksKurs.Range("B1:F1")) + 2 'nächste Spalte  _
setzen wenn Comnbobox2 selektiert wird
If lngSpalte = 7 Then
lngSpalte = 6
MsgBox "Zellen B1 bis F1 sind gefüllt" & vbLf _
& "Zelle F1 kann nochmals geändert werden!"
End If
End Sub

Anzeige
AW: VBA: Combobox neu laden
04.02.2014 12:17:05
Bernd
Hallo Franz,
♥Dank für deine schnelle Hilfe.
Jetzt passt es!
Gruß
Bernd

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige