AW: Am Lernen
26.05.2021 18:32:51
Yal
Hallo Daniel (im Forum spricht man sich üblicherweise mit Vornamen an... Jetzt, dass ich weiß, dass deinen nicht Eberhard ist :-)
im Code der Userform habe ich
Private Sub UserForm_Initialize()
Call Test(UserForm_Lager, "ComboBox1")
End Sub
im Modul1
Public Sub Test(ByRef UF As Object, cBox As String)
Dim strBreite As String
Dim letzteZeile As String
Dim i As Long
With Worksheets("Tabelle1")
letzteZeile = .Cells(Rows.Count, 10).End(xlUp).Row
strBreite = Columns(10).Width + 24
With UF.Controls(cBox)
.Clear
.Font.Size = 12
.FontName = "Tahoma"
.Width = strBreite
.Height = 20
End With
For i = 2 To letzteZeile
UF.Controls(cBox).AddItem .Cells(i, 10).Value
Next i
End With
End Sub
Die Formatierung der Combobox (Breite, usw.) würde ich aber weiterhin in dem Userform abgelegen. So dass die sub "Test" sich nur noch um die Versorgung der Daten kümmert, nach der Prinzip "eine Aufgabe pro Sub/Function".
Noch puristischer wäre, diese "Test"-Sub liefert nur die Adresse der Bereich, wo die Daten, die den ComboBox befüllen sollen, liegen. Das Befüllen selbst würde dem ComboBox, bzw. Userform behalten bleiben. Dann würde es eine Rückgabewert geben und es müsste dann eine Function sein.
Es würde ungefähr so aussehen:
beim Initialisieren die Adresse der Liste abrufen, dann per Schleife die Inhalt der Zelle lesen. Dabei die max. Textlänge ermitteln, um daraus mit einem Faktor (1.2 ist meine Erfindung. Da musste man prüfen, ob es passt) die Breite der Combobox ermitteln.
Private Sub UserForm_Initialize()
Dim Z As Range
Dim Liste As Range
Dim TextBreite As Integer
With UF.Controls(cBox)
.Clear
Set Liste = ListenBereich_übergeben
For Each Z In Liste.Cells
UF.Controls(cBox).AddItem Z.Value
TextBreite = WorksheetFunction.Max(TextBreite, Len(Z.Value))
Next
.Width = TextBreite * 1.2
.Height = 20
End With
End Sub
Die aufgerufene Function ListenBereich_übergeben gibt eine "Range"-Objekt zurück, das man als eine Auflistung von Zellen betrachten kann.
Public Function ListenBereich_übergeben() As Range
With Worksheets("Tabelle1")
Set ListenBereich_übergeben = .Range(.Range("J2"), .Cells(Rows.Count, 10).End(xlUp))
End With
End Function
VG
Yal