Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

ComboBox as Variable in Sub übergeben

Forumthread: ComboBox as Variable in Sub übergeben

ComboBox as Variable in Sub übergeben
16.12.2005 16:14:18
mazarata
Hallo Profis
Das Abfüllen von List- bzw. ComboBox in UserForms soll über eine zentrale Prozedur gesteuert werden, da die Daten von einer Access-Datenbank gewonnen werden.
Public Sub InitializeCobx(ByVal Cobx As MSForms.Control, ByVal Table As String, ByVal Field As String)
Dim objRecset As ADODB.Recordset
Dim i As Integer
Dim vArray() As Variant
OpenConnectionMDB
Set objRecset = New ADODB.Recordset
objRecset.Open Table, objConnMDB, adOpenKeyset, adLockOptimistic
i = 0
Do Until objRecset.EOF
ReDim Preserve vArray(i)
vArray(i) = objRecset.Fields(Field).Value
i = i + 1
objRecset.MoveNext
Loop
objRecset.Close
Call QuickSortVariants(vArray, LBound(vArray), UBound(vArray))
For i = LBound(vArray) To UBound(vArray)
Cobx.AddItem vArray(i)
Next
Set objRecset = Nothing
objConnMDB.Close
End Sub
PROBLEM: Die Prozedur wird im UserForm_Initialize aufgerufen. Gestern klappte es problemlos, heute hingegen wird mit contr ein leeres String übergeben. Aber auch wenn ich im zweiten Aufruf auf contr verzichte und die komplette Bezeichnung der ComboBox übergebe, wird ein "" übergeben. Woran könnte das liegen - jetzt bin ich am Limit.

Private Sub UserForm_Initialize()
Dim contr As ComboBox
With Me
.lbl_ExtPartner.Visible = False
.cobx_ExtPartnerName.Visible = False
End With
Set contr = Me.cobx_Department
Call InitializeCobx(contr, "tblDepartment", "DeptName")
Call InitializeCobx (frmNewHR.cobx_ExtPartnerName, "tblExtPartner", "ExtPartnerName")
End Sub

Vielen Dank für die Hilfe
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ComboBox as Variable in Sub übergeben
16.12.2005 17:01:37
Luschi
Hallo mazarata,
Objekte muß man als Referenz an selbstentwickelte Prozeduren/Funktionen übergeben:
Public Sub InitializeCobx(ByRef Cobx As MSForms.Control, ByVal Table As String, ByVal Field As String)
oder (da ByRef Standard ist)
Public Sub InitializeCobx(Cobx As MSForms.Control, ByVal Table As String, ByVal Field As String)
Gruß von Luschi
aus klein-Paris
Anzeige
AW: ComboBox as Variable in Sub übergeben
16.12.2005 17:14:37
mazarata
Hallo Luschi
Danke für Dein Input. Das Problem entsteht jedoch schon im UserForm_Initzialize. contr wird auf "" gesetzt, als würde es sich um einen String halten. Doch contr ist als ComboBox definiert. Da muss irgendwo das Problem liegen.
ByRef werde ich anwenden. merci beacoup.
Mazarata
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

ComboBox als Variable in Sub übergeben


Schritt-für-Schritt-Anleitung

Um eine ComboBox in VBA korrekt als Variable in eine Sub-Prozedur zu übergeben, befolge diese Schritte:

  1. Definiere die Sub-Prozedur: Stelle sicher, dass die Prozedur, die die ComboBox initialisiert, den Parameter als ByRef übergibt. Das bedeutet, dass die ComboBox als Referenz übergeben wird.

    Public Sub InitializeCobx(ByRef Cobx As MSForms.Control, ByVal Table As String, ByVal Field As String)
  2. Setze die ComboBox im UserForm: Im UserForm_Initialize musst du die ComboBox korrekt setzen. Hier ein Beispiel:

    Private Sub UserForm_Initialize()
       Dim contr As ComboBox
       Set contr = Me.cobx_Department
       Call InitializeCobx(contr, "tblDepartment", "DeptName")
       Call InitializeCobx(Me.cobx_ExtPartnerName, "tblExtPartner", "ExtPartnerName")
    End Sub
  3. Daten aus der Datenbank abrufen: Stelle sicher, dass du eine Verbindung zur Access-Datenbank hast und dass die Daten korrekt abgerufen werden.

  4. Füge die Items zur ComboBox hinzu: Verwende eine Schleife, um die abgerufenen Daten der ComboBox hinzuzufügen.

    For i = LBound(vArray) To UBound(vArray)
       Cobx.AddItem vArray(i)
    Next

Häufige Fehler und Lösungen

  • Problem: Leerer String wird übergeben: Wenn du einen leeren String in der ComboBox erhältst, überprüfe, ob die ComboBox korrekt gesetzt ist. Achte darauf, dass der Name der ComboBox im UserForm exakt übereinstimmt.

  • Lösung: ByRef verwenden: Um sicherzustellen, dass die ComboBox korrekt als Referenz übergeben wird, ändere die Sub-Deklaration zu ByRef.


Alternative Methoden

Wenn du mit der ComboBox in VBA nicht weiterkommst, kannst du auch folgende Methoden in Betracht ziehen:

  • Direktes Binden an Datenquellen: Anstatt die Items manuell hinzuzufügen, kannst du die ComboBox direkt an eine Datenquelle binden.

  • Verwendung von ListBox: Eine ListBox kann eine Alternative zur ComboBox sein und bietet mehr Flexibilität bei der Anzeige von Daten.


Praktische Beispiele

Hier ist ein Beispiel, das zeigt, wie du eine ComboBox aus einer Access-Datenbank füllst:

Public Sub InitializeCobx(ByRef Cobx As MSForms.Control, ByVal Table As String, ByVal Field As String)
    Dim objRecset As ADODB.Recordset
    Dim i As Integer
    Dim vArray() As Variant

    ' Open connection and recordset
    OpenConnectionMDB
    Set objRecset = New ADODB.Recordset
    objRecset.Open Table, objConnMDB, adOpenKeyset, adLockOptimistic

    i = 0
    Do Until objRecset.EOF
        ReDim Preserve vArray(i)
        vArray(i) = objRecset.Fields(Field).Value
        i = i + 1
        objRecset.MoveNext
    Loop
    objRecset.Close

    ' Füge Items zur ComboBox hinzu
    For i = LBound(vArray) To UBound(vArray)
        Cobx.AddItem vArray(i)
    Next
    Set objRecset = Nothing
    objConnMDB.Close
End Sub

Tipps für Profis

  • Verwende Error-Handling: Implementiere Error-Handling in deinem Code, um mögliche Laufzeitfehler abzufangen. Nutze On Error Resume Next oder On Error GoTo für eine bessere Fehlerbehandlung.

  • Optimiere die Datenabfrage: Stelle sicher, dass die Abfrage zur Datenbank optimal ist, um die Performance zu verbessern. Verwende Parameter in deinen SQL-Abfragen, um die Effizienz zu steigern.


FAQ: Häufige Fragen

1. Frage
Warum wird die ComboBox manchmal leer angezeigt?
Antwort: Dies kann passieren, wenn die ComboBox nicht korrekt gesetzt ist oder die Datenbankverbindung nicht funktioniert. Überprüfe die Namen und die Verbindung zur Datenbank.

2. Frage
Wie kann ich mehrere ComboBoxes gleichzeitig füllen?
Antwort: Du kannst die InitializeCobx-Sub für jede ComboBox aufrufen, indem du die entsprechenden Parameter übergibst. Stelle sicher, dass die Datenbankverbindung für jede Abfrage korrekt ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige