Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

ComboBox über Befehl LIST befüllt

Forumthread: ComboBox über Befehl LIST befüllt

ComboBox über Befehl LIST befüllt
02.07.2024 15:07:46
krug96
Hallo,

ich bräuchte mal wieder eure Hilfe.
In einer zweiten xlsx-Datei stehen im Tabellenblatt "Tabelle1" Werte. Die Werte, die ich benötige stehen in den Spalten C bis F. In der Spalte C wird die Anzahl der Zeilen ab Zeile 2 ermittelt. In der Splate C stehen auch die Daten, die in der ComboBox4 angezeigt werden. Wenn in der ComboBox4 ein Eintrag ausgewählt wird, sollen aus der jeweiligen Zeile dann die Werte aus den Spalten D, E und F in jeweils ein Textfeld geladen werden.
Ich befülle meine ComboBox mit dem folgenden Code:



'Anzahl Zeilen in der Spalte C-F für ComboBox4
leZeile = .Cells(.Rows.Count, 3).End(xlUp).Row
FormAZAV.ComboBox4.Style = fmStyleDropDownCombo
FormAZAV.ComboBox4.List = .Range("C2:F" & leZeile).Value
FormAZAV.ComboBox4.ListIndex = 0
FormAZAV.ComboBox4.Style = fmStyleDropDownList


Das Befüllen der ComboBox funktioniert. Wie muss ich das erweitern, dass dann die jeweiligen Werte in den Textboxen angezeigt werden?


Private Sub ComboBox4_Click()
If .ComboBox4.ListIndex > 0 Then
.TextBox16.Value = --> was muss hier stehen? --
.TextBox17.Value = --> was muss hier stehen? --
.TextBox18.Value = --> was muss hier stehen? --
Else
'alle TextBoxen Inhalt leeren
For i = 1 To 18
If i = 16 Or i = 17 Or i = 18 Then
Controls("TextBox" & i).Value = ""
End If
Next i
End If
End sub


Ist das so überhaupt der richtige Ansatz?

Vielen Dank
Viele Grüße Micahel
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: ComboBox über Befehl LIST befüllt
02.07.2024 15:22:18
Beverly
Hi Michael,

versuche es mal nach diesem Prinzip (für Spalte C):

Me.TextBox16.Value = Worksheets("Tabelle1").Cells(Me.ComboBox4.ListIndex + 2, 3)



Bis später
Karin

Link zur Homepage: https://excel-inn.de/
Anzeige
AW: ComboBox über Befehl LIST befüllt
02.07.2024 20:51:49
krug96
Hallo Karin,

vielen Dank für den Code.
Wenn ich Deinen Code richtig lese, dann funktioniert das nur, wenn die Daten in der gleichen Datei liegen, in der auch die UserForm ist.
Ich habe aber die Daten aus einer anderen Datei in ein Range eingelesen und die Datei mit den Daten wird nach dem Einlesen wieder geschlossen.
Ich muss also die einzelnen werte aus dem Range auslesen.

Ich habe hier ein kleines Beispiel hochgeladen.

https://www.herber.de/bbs/user/170631.zip


Gruß
Michael
Anzeige
AW: ComboBox über Befehl LIST befüllt
02.07.2024 15:27:30
Piet
Hallo

probiere es bitte einmal so:
.TextBox16.Value = .ComboBox4.List(ListIndex, 0)
.TextBox17.Value = .ComboBox4.List(ListIndex, 1)
.TextBox18.Value = .ComboBox4.List(ListIndex, 2)

mfg Piet
AW: ComboBox über Befehl LIST befüllt
02.07.2024 20:55:33
krug96
Hallo Piet,

vielen Dank für Deinen Code.
Es werden die TextBoxen gefüllt, aber immer die gleichen werte und zwar die aus C2 und zwar immer D2, E2 und F2


Ich habe hier ein kleines Beispiel hochgeladen.

https://www.herber.de/bbs/user/170631.zip


Gruß
Michael
Anzeige
AW: ComboBox über Befehl LIST befüllt
02.07.2024 21:30:32
Alwin Weisangler
Hallo,

ändere so:


Private Sub ComboBox1_Click()
If ComboBox1.ListIndex > 0 Then
With ComboBox1
TextBox1.Value = .List(.ListIndex, 1)
TextBox2.Value = .List(.ListIndex, 2)
TextBox3.Value = .List(.ListIndex, 3)
End With
Else
'alle TextBoxen Inhalt leeren
For i = 1 To 3
.Controls("TextBox" & i).Value = ""
Next i
End If

End Sub

Private Sub UserForm_Initialize()
Dim leZeile As Long
Dim leSpalte As Long

Dim objExcel As New Excel.Application
Dim objSheet As Object

Dim DateiNameFile As String

DateiNameExcel = "c:\excel\test2\daten.xlsx"

objExcel.Workbooks.Open DateiNameExcel, ReadOnly:=True
Set objSheet = objExcel.Sheets("Tabelle1")

'Anzahl Zeilen in der Spalte C
leZeile = objSheet.Cells(Rows.Count, 3).End(xlUp).Row
With ComboBox1
.ColumnCount = 4
.ColumnWidths = "60;0;0;0"
.List = objSheet.Range("C2:F" & leZeile).Value
.ListIndex = 0
.Style = fmStyleDropDownList
End With




leZeile = 0
leSpalte = 0
i = 0

'+-------------------------------------------------------------------------+
'| Datei speichern und schliessen |
'+-------------------------------------------------------------------------+
objExcel.EnableEvents = False
objExcel.DisplayAlerts = False
objExcel.ActiveWorkbook.Close
objExcel.Quit
objExcel.EnableEvents = True
objExcel.DisplayAlerts = True
Set objExcel = Nothing
Set objSheet = Nothing
End Sub


Gruß Uwe
Anzeige
AW: ComboBox über Befehl LIST befüllt
02.07.2024 21:39:24
ralf_b
ich würde gern wissen wozu im Initialize listindex = 0 wenn du dort eh nur leere Werte hast?
Ich habs mal ausgelagert ins activate(), weil dann das initialize schon durch ist wenn das Klickevent der Combobox das erste Mal aufgerufen wird.

Private Sub ComboBox1_Click()

Dim indx&

With ComboBox1
indx = .ListIndex
For i = 1 To 3
Me.Controls("TextBox" & i).Value = IIf(indx = -1 Or .Value = "", "", .List(indx, i))
Next i
End With

End Sub

Private Sub UserForm_Activate()
If ComboBox1.ListCount > 0 Then ComboBox1.ListIndex = 0
End Sub

Private Sub UserForm_Initialize()

Dim DateiNameFile As String
Dim arr

DateiNameExcel = "c:\excel\test2\daten.xlsx"

With GetObject(DateiNameExcel).Worksheets("Tabelle1")
arr = .Range("C2:F" & .Cells(.Rows.Count, 3).End(xlUp).Row).Value
End With

With ComboBox1
.List = arr
Style = fmStyleDropDownList
End With

End Sub
Anzeige
AW: ComboBox über Befehl LIST befüllt
02.07.2024 22:46:23
krug96
Hallo Uwe,
hallo Ralf_b,

vielen Dank für eure Hilfe.
Ich habe es jetzt so umgesetzt, damit es auch so funktioniert, wie ich es haben wollte:



Private Sub ComboBox1_Click()
Dim indx&

With ComboBox1
indx = .ListIndex
For i = 1 To 3
UserForm1.Controls("TextBox" & i).Value = IIf(indx = -1 Or .Value = "", "", .List(indx, i))
Next i
End With


End Sub

Private Sub UserForm_Initialize()
Dim leZeile As Long
Dim leSpalte As Long

Dim objExcel As New Excel.Application
Dim objSheet As Object

Dim arr

Dim DateiNameFile As String

DateiNameExcel = "c:\excel\test2\daten.xlsx"


objExcel.Workbooks.Open DateiNameExcel, ReadOnly:=True
Set objSheet = objExcel.Sheets("Tabelle1")

With objSheet
'Anzahl Zeilen in der Spalte C
leZeile = .Cells(.Rows.Count, 3).End(xlUp).Row

arr = .Range("C2:F" & leZeile).Value

UserForm1.ComboBox1.Style = fmStyleDropDownCombo
UserForm1.ComboBox1.List = arr
UserForm1.ComboBox1.ListIndex = 0
UserForm1.ComboBox1.Style = fmStyleDropDownList
End With


leZeile = 0
leSpalte = 0
i = 0

'+-------------------------------------------------------------------------+
'| Datei speichern und schliessen |
'+-------------------------------------------------------------------------+
objExcel.EnableEvents = False
objExcel.DisplayAlerts = False
objExcel.ActiveWorkbook.Close
objExcel.Quit
objExcel.EnableEvents = True
objExcel.DisplayAlerts = True
Set objExcel = Nothing
Set objSheet = Nothing
End Sub




@Ralf_b: der Listindex = 0, weil ich auch leer Werte anbiete, wenn mal nichts ausgewählt werden soll.

@Uwe: Bei
.Controls("TextBox" & i).Value = ""
musste ich
UserForm1.Controls("TextBox" & i).Value = ""
erweitern, damit Deine Lösung auch funktioniert hat.

Vielen Dank
Anzeige
AW: ComboBox über Befehl LIST befüllt
03.07.2024 01:04:37
ralf_b
was stört dich denn an der getobject() variante? Wenn du die nimmst hast du viel weniger Theater mit einer sich öffnenden Datei.
Wenn du im Codemodul der Userform bist, benötigst du keinen "Userfom1. " präfix.
eine leere Zeile in Tabellen versuche ich zu vermeiden.
das mache ich dann so.


.List = arr
.AddItem "", 0
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige