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

Wert einer Combobox manuell überschreibe

Wert einer Combobox manuell überschreibe
06.09.2021 15:24:10
Dirk
Hallo an die Spezialisten im Forum,
ich habe ein Userform mit mehreren Comboboxen. Nun habe ich das Problem, daß ich den Inhalt ab und zu überschreiben muß. Bei den Comboboxen 1 bis 10 fiunktioniert das einwandfrei, die Combobxen 11 - 15 lassen sich inhaltlich manuell nicht ändern. Die Eigenschaften aller Comboboxen sind identisch und werden auch per VBA nicht verändert. Hier mein Code :

Private Sub ComboBox1_Change()
Dim i As Integer
Dim imax As Integer
Dim tb As Object
Dim cb As Object
Sheets("VP_Prämien").Activate
Label59.Caption = "Vertriebsprogramm " & ComboBox1.Value & " " & Range("Z1").Value
Sheets("FZ_HST").Activate
With Me.ComboBox2
If ComboBox1.Value = "Abarth" Then
.ListRows = 6
.Clear
imax = ActiveSheet.UsedRange.Rows.Count
For i = 1 To imax
.AddItem Worksheets("FZ_HST").Cells(i, 3)
Next i
Sheets("VP_Prämien").Activate
If Application.WorksheetFunction.CountA(Range("A:A")) = 0 Then
MsgBox "Für die Marke " & ComboBox1.Value & " sind noch keine Prämien hinterlegt !" & vbCrLf & "Bitte führen Sie das Prämien-Update durch !" & _
vbCrLf & "Dieses finden Sie im Hauptmenu unter DISPOSITION !", vbExclamation, "Fehlende Prämien"
For Each tb In UFLB.Controls
If TypeName(tb) = "TextBox" Then tb.Text = ""
Next tb
For Each cb In UFLB.Controls
If TypeName(cb) = "ComboBox" Then cb.Text = ""
Next cb
Label59.Caption = ""
Exit Sub
End If
With Me.ComboBox11
.Clear
imax = ActiveSheet.UsedRange.Rows.Count
For i = 1 To imax
.AddItem Worksheets("VP_Prämien").Cells(i, 1)
Next i
End With
'        ComboBox11.RowSource = "VP_Prämien!A1:A50"
'        ComboBox12.RowSource = "VP_Prämien!A1:A50"
'        ComboBox13.RowSource = "VP_Prämien!A1:A50"
'        ComboBox14.RowSource = "VP_Prämien!A1:A50"
End If
If ComboBox1.Value = "Fiat PKW" Then
.ListRows = 13
.Clear
imax = ActiveSheet.UsedRange.Rows.Count
For i = 1 To imax
.AddItem Worksheets("FZ_HST").Cells(i, 4)
Next i
Sheets("VP_Prämien").Activate
If Application.WorksheetFunction.CountA(Range("E:E")) = 0 Then
MsgBox "Für die Marke " & ComboBox1.Value & " sind noch keine Prämien hinterlegt !" & vbCrLf & "Bitte führen Sie das Prämien-Update durch !" & _
vbCrLf & "Dieses finden Sie im Hauptmenu unter DISPOSITION !", vbExclamation, "Fehlende Prämien"
For Each tb In UFLB.Controls
If TypeName(tb) = "TextBox" Then tb.Text = ""
Next tb
For Each cb In UFLB.Controls
If TypeName(cb) = "ComboBox" Then cb.Text = ""
Next cb
Label59.Caption = ""
Exit Sub
End If
ComboBox11.RowSource = "VP_Prämien!E1:E50"
ComboBox12.RowSource = "VP_Prämien!E1:E50"
ComboBox13.RowSource = "VP_Prämien!E1:E50"
ComboBox14.RowSource = "VP_Prämien!E1:E50"
End If
If ComboBox1.Value = "Fiat Professional" Then
.ListRows = 6
.Clear
imax = ActiveSheet.UsedRange.Rows.Count
For i = 1 To imax
.AddItem Worksheets("FZ_HST").Cells(i, 5)
Next i
Sheets("VP_Prämien").Activate
If Application.WorksheetFunction.CountA(Range("I:I")) = 0 Then
MsgBox "Für die Marke " & ComboBox1.Value & " sind noch keine Prämien hinterlegt !" & vbCrLf & "Bitte führen Sie das Prämien-Update durch !" & _
vbCrLf & "Dieses finden Sie im Hauptmenu unter DISPOSITION !", vbExclamation, "Fehlende Prämien"
For Each tb In UFLB.Controls
If TypeName(tb) = "TextBox" Then tb.Text = ""
Next tb
For Each cb In UFLB.Controls
If TypeName(cb) = "ComboBox" Then cb.Text = ""
Next cb
Label59.Caption = ""
Exit Sub
End If
ComboBox11.RowSource = "VP_Prämien!I1:I50"
ComboBox12.RowSource = "VP_Prämien!I1:I50"
ComboBox13.RowSource = "VP_Prämien!I1:I50"
ComboBox14.RowSource = "VP_Prämien!I1:I50"
End If
If ComboBox1.Value = "Alfa Romeo" Then
.ListRows = 7
.Clear
imax = ActiveSheet.UsedRange.Rows.Count
For i = 1 To imax
.AddItem Worksheets("FZ_HST").Cells(i, 6)
Next i
Sheets("VP_Prämien").Activate
If Application.WorksheetFunction.CountA(Range("C:C")) = 0 Then
MsgBox "Für die Marke " & ComboBox1.Value & " sind noch keine Prämien hinterlegt !" & vbCrLf & "Bitte führen Sie das Prämien-Update durch !" & _
vbCrLf & "Dieses finden Sie im Hauptmenu unter DISPOSITION !", vbExclamation, "Fehlende Prämien"
For Each tb In UFLB.Controls
If TypeName(tb) = "TextBox" Then tb.Text = ""
Next tb
For Each cb In UFLB.Controls
If TypeName(cb) = "ComboBox" Then cb.Text = ""
Next cb
Label59.Caption = ""
Exit Sub
End If
ComboBox11.RowSource = "VP_Prämien!C1:C50"
ComboBox12.RowSource = "VP_Prämien!C1:C50"
ComboBox13.RowSource = "VP_Prämien!C1:C50"
ComboBox14.RowSource = "VP_Prämien!C1:C50"
End If
If ComboBox1.Value = "Jeep" Then
.ListRows = 6
.Clear
imax = ActiveSheet.UsedRange.Rows.Count
For i = 1 To imax
.AddItem Worksheets("FZ_HST").Cells(i, 7)
Next i
Sheets("VP_Prämien").Activate
If Application.WorksheetFunction.CountA(Range("G:G")) = 0 Then
MsgBox "Für die Marke " & ComboBox1.Value & " sind noch keine Prämien hinterlegt !" & vbCrLf & "Bitte führen Sie das Prämien-Update durch !" & _
vbCrLf & "Dieses finden Sie im Hauptmenu unter DISPOSITION !", vbExclamation, "Fehlende Prämien"
For Each tb In UFLB.Controls
If TypeName(tb) = "TextBox" Then tb.Text = ""
Next tb
For Each cb In UFLB.Controls
If TypeName(cb) = "ComboBox" Then cb.Text = ""
Next cb
Label59.Caption = ""
Exit Sub
End If
ComboBox11.RowSource = "VP_Prämien!G1:G50"
ComboBox12.RowSource = "VP_Prämien!G1:G50"
ComboBox13.RowSource = "VP_Prämien!G1:G50"
ComboBox14.RowSource = "VP_Prämien!G1:G50"
End If
If ComboBox1.Value = "Skoda" Then
.ListRows = 9
.Clear
imax = ActiveSheet.UsedRange.Rows.Count
For i = 1 To imax
.AddItem Worksheets("FZ_HST").Cells(i, 8)
Next i
End If
If ComboBox1.Value = "Seat" Then
.ListRows = 7
.Clear
imax = ActiveSheet.UsedRange.Rows.Count
For i = 1 To imax
.AddItem Worksheets("FZ_HST").Cells(i, 9)
Next i
End If
End With
End Sub

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wert einer Combobox manuell überschreibe
06.09.2021 16:06:00
ChrisL
Hi Dirk
Die Eigenschaften aller Comboboxen sind identisch ...
Auch die Eigenschaft "MatchRequired"?
Gibt es eine Fehlermeldung?
cu
Chris
AW: Wert einer Combobox manuell überschreibe
06.09.2021 16:15:04
Dirk
Hallo Chris,
steht bei allen Comboboxen auf "False". Vielleicht sollte ich noch ergänzend erwähnen, daß es nur die Comboboxen betrifft, die beim Change-Ereignis Daten aus dem Sheet der Nachbarzellen ziehen (also SVERWEIS per VBA). Auch hier der Code :

Private Sub ComboBox11_Change()
On Error Resume Next
Sheets("VP_Prämien").Activate
If ComboBox1.Value = "Abarth" Then
Range("A:A").Select
Selection.Find(what:=ComboBox11.Value, _
after:=ActiveCell, _
LookIn:=xlFormulas, lookat:=xlWhole, _
searchorder:=xlByRows, searchdirection:=xlPrevious, _
MatchCase:=False).Activate
ComboBox11.Value = ActiveCell.Offset(0, 0).Value
TextBox30.Value = ActiveCell.Offset(0, 1).Value
End If
If ComboBox1.Value = "Alfa Romeo" Then
Range("C:C").Select
Selection.Find(what:=ComboBox11.Value, _
after:=ActiveCell, _
LookIn:=xlFormulas, lookat:=xlWhole, _
searchorder:=xlByRows, searchdirection:=xlPrevious, _
MatchCase:=False).Activate
ComboBox11.Value = ActiveCell.Offset(0, 0).Value
TextBox30.Value = ActiveCell.Offset(0, 1).Value
End If
If ComboBox1.Value = "Fiat PKW" Then
Range("E:E").Select
Selection.Find(what:=ComboBox11.Value, _
after:=ActiveCell, _
LookIn:=xlFormulas, lookat:=xlWhole, _
searchorder:=xlByRows, searchdirection:=xlPrevious, _
MatchCase:=False).Activate
ComboBox11.Value = ActiveCell.Offset(0, 0).Value
TextBox30.Value = ActiveCell.Offset(0, 1).Value
End If
If ComboBox11.Value = "Jeep" Then
Range("G:G").Select
Selection.Find(what:=ComboBox11.Value, _
after:=ActiveCell, _
LookIn:=xlFormulas, lookat:=xlWhole, _
searchorder:=xlByRows, searchdirection:=xlPrevious, _
MatchCase:=False).Activate
ComboBox11.Value = ActiveCell.Offset(0, 0).Value
TextBox30.Value = ActiveCell.Offset(0, 1).Value
End If
If ComboBox11.Value = "Fiat Professional" Then
Range("I:I").Select
Selection.Find(what:=ComboBox11.Value, _
after:=ActiveCell, _
LookIn:=xlFormulas, lookat:=xlWhole, _
searchorder:=xlByRows, searchdirection:=xlPrevious, _
MatchCase:=False).Activate
ComboBox11.Value = ActiveCell.Offset(0, 0).Value
TextBox30.Value = ActiveCell.Offset(0, 1).Value
End If
End Sub

Anzeige
AW: Wert einer Combobox manuell überschreibe
06.09.2021 17:14:05
ChrisL
Hi Dirk
Da kann ich leider nicht durchblicken. Aber nimm einfach mal die Zeile "On Error Resume Next" raus, dann siehst du die Fehlermeldung.
Die Zeile ComboBox11.Value = ActiveCell.Offset(0, 0).Value scheint überflüssig. Die ComboBox enthält ja bereits den gewünschten Wert und zudem löst du damit das Change-Ereignis ein weiteres mal aus (= Endlosschleife).
cu
Chris
AW: Wert einer Combobox manuell überschreibe
06.09.2021 17:22:32
Dirk
Hallo Chris,
super Tipp, ich habe die überflüßige Zeile auskommentiert und schon gehts.
Vielen, vielen Dank, Du hast heute wieder einen Menschen glücklich gemacht !
AW: Wert einer Combobox manuell überschreibe
06.09.2021 17:35:00
Daniel
Hi
ich würde grundsätzlich nicht das Change-Event verwenden, wenn du auf Anwendereingaben reagieren willst,
Dazu ist Click, AfterUpdate oder Exit besser geeignet
Change läuft bei jeder Änderung am Objekt, egal was geändert wird und wer es ausführt (Anwender oder dein Code).
Gruß Daniel
Anzeige
AW: Wert einer Combobox manuell überschreibe
06.09.2021 17:45:49
Daniel
noch ein Tipp, wie du deinen Code vereinfachen kannst:
du willst ja immer, dass in der Textbox die rechte Nachbarzelle des in der Combobox gewählten Eintrags erscheint.
das kannst du auch einfacher haben:
1. Weise als ControlSource gleich beide Spalten der Combobox zu, Die Combobox muss dann die Eigenschaft Columns = 2 haben. Wenn die zweite Spalte in der Klappliste nicht erscheinen soll, gibst du das über die ColumnsWidth in den Eigenschaften an: (ColumnWidth = 30;0 0=nicht anzeigen)
der Code dafür wäre dann (z.B. für Combobox1, Fiat Professional:): ComboBox11.RowSource = "VP_Prämien!E1:F50"
damit hast du den zweiten Wert gleich in der Combobox drin.
2. das Anzeigen des zweiten Wertes geht dann direkt aus der Combobox, dh im ChangeEvent der Combobox11 (oder auch AfterUpdate, je nach dem)

If Combobox11.ListIndex >=0
TextBox30.Value = Combobox11.List(Combobox11.ListIndex, 1)
Else
TextBox30.Value = ""
end if
dh du musst dann nichts mehr suchen, werde die passenede Zeile noch die passende Spalte, weil du die Daten schon komplett in der ComboboxListe drin hast.
Gruß Daniel
Anzeige
AW: Wert einer Combobox manuell überschreibe
06.09.2021 18:02:09
Dirk
Hallo Daniel,
vielen Dank auch Dir für Deinen Tipp, probiere ich heute abend gleich mal aus.
Super Service hier bei Euch !

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige