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

Combobox mit Inhalt aus Datenbank füllen

Forumthread: Combobox mit Inhalt aus Datenbank füllen

Combobox mit Inhalt aus Datenbank füllen
21.11.2021 15:43:55
Tobi
Hallo Ihr lieben.
Ich versuche mich schon den ganzen Tag mit meinen VBA Grundkentnissen es hinzubekommen aber ich schaffe es nicht :(
Problemstellung:
Die Datenbankverbindung zur MySQL Datenbank steht. Andere Abfragen funktionieren.
Nun möchte ich aus der Tabelle Namen die komplette spalte Nachnamen in die Combobox3 der Mappe beim öffnen der Mappe einzulesen.
Kann mir jemand beibei helfen?
Liebe Grüße Tobi
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Combobox mit Inhalt aus Datenbank füllen
21.11.2021 15:54:39
Hajo_Zi
Hallo Tobi,

Option Explicit
Private Sub Workbook_Open()
With Worksheets("Tabelle1")
Dim Loletzte As Long
Loletzte = IIf(IsEmpty(.Cells(Rows.Count, 1)), .Cells(Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.ComboBox1.ListFillRange = "A1:A" & Loletzte
End With
End Sub
GrußformelHomepage
In diesem Forum bekomme nur selten eine Mailbenachrichtigung, weitere Antworten sind zufällig.
Anzeige
Das beantwortet nicht meine Frage
21.11.2021 16:12:46
Tobi
Leider war das nicht die passende Antwort auf meine Frage ..
die Frage ist wie ich die Werte aus einer Tabelle einer MySQL Datenbank in ein Array schreiben kann!
AW: Das beantwortet nicht meine Frage
21.11.2021 16:17:30
Hajo_Zi
meine Antwort bezog sich auf diesen Teil

Nun möchte ich aus der Tabelle Namen die komplette spalte Nachnamen in die Combobox3 der Mappe beim öffnen der Mappe einzulesen.
da ich das falsch gelesen habe bin ich raus.
Voiel Erfolg noch.
Gruß Hajo
Anzeige
AW: Das beantwortet nicht meine Frage
21.11.2021 16:43:57
Tobi
Schon gewusst .. in Datenbanken spricht man auch von Tabellen. Man sollte schon alles lesen bevor man was schreibt!!
Schon die Überschrift des Threads ist eigentlich eindeutig.
Ich wollte schon in meine Anfrage schreiben " Bitte keine Antwort von Hajo_Zi" denn mir war Ihre Antwort sowas von klar!
Anzeige
AW: Combobox mit Inhalt aus Datenbank füllen
21.11.2021 16:22:40
ralf_b
wo ist denn dein Code?
Wofür benötigst du Hilfe ? Für die Abfrage oder für die Zuweisung in die Combobox.List ?
AW: Combobox mit Inhalt aus Datenbank füllen
21.11.2021 16:42:02
Tobi
Hallo, vielen Dank für die Antwort
Mir würde es schon reichen wenn ich wüsste wie man aus der Datenbantabelle ( Namen ) die Spalte Nachnamen in ein Array schreibt.
Die Abfrage bekomme ich nicht hin.
Liebe Grüße
Tobi
Anzeige
AW: Combobox mit Inhalt aus Datenbank füllen
21.11.2021 17:35:29
Tobi
Hallo, vielen Dank für die Hilfe
Ich habe folgendes erstellt .. aber es wird nur die erste Zeile in die Combo Box geschrieben.
Was muss ich machen dass alle Werte aus der Spalte in die ComboBox geschrieben wird?

Sub befuellen
Dim uData As ADODB.Recordset
Dim Namen As Long
Dim NamenArray As Variant
ConnectDB
Set uData = GetRecordset(Namen)
NamenArray = uData.Fields.Item("Nachnamen").Value
Worksheets(1).ComboBox3.AddItem (NamenArray)
End Sub

Function GetRecordset(id As Long) As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim sqlstr As String
sqlstr = "SELECT  Strassen_Namen FROM " & uTable & " "
rs.Open sqlstr, cn
Set GetRecordset = rs
End Function
Liebe Grüße
Tobi
Anzeige
AW: Combobox mit Inhalt aus Datenbank füllen
21.11.2021 18:42:23
ralf_b
Ein paar Anmerkungen. Grundsätzlich kann man als Außenstehender solche Codes nicht nachvollziehen wenn man nicht den gesamten Code kennt und keinen Zugang zu Datenbanken hat, um die Abfragen zu testen. Deshalb kann ich nur das beurteilen was du zeigst.

Function GetRecordset(id As Long) As ADODB.Recordset
'wo findet sich id im code der function wieder?
Set rs = New ADODB.Recordset
Dim sqlstr As String
sqlstr = "SELECT  Strassen_Namen FROM " & uTable & " "
'was ist uTable für  eine Variable? Sollte  da nicht id stehen?
rs.Open sqlstr, cn
'was ist cn für eine Variable?  Woher kommt diese?
Set GetRecordset = rs
End Function
in der Sub wird additem benutzt. das fügt nur eine Datenzeile hinzu. nutze .list um das Array zur liste des Controls zuzuweisen.
Anzeige
AW: Combobox mit Inhalt aus Datenbank füllen
21.11.2021 19:35:57
Tobi
Hallo,
ich habe mal eine Testdatei gemacht.
In der Testdatei soll die Combobox Strassen mit Strassennamen befüllt werden.
Auch hier wird nur eine Straße eingelesen
Hier die Musterdatei
https://www.herber.de/bbs/user/149285.xlsm
Hier die Datei für die Datenbank
https://www.herber.de/bbs/user/149287.zip
Liebe Grüße
Tobi
Anzeige
AW: Combobox mit Inhalt aus Datenbank füllen
22.11.2021 07:14:51
ralf_b
Moin
leider hat mit deine Beispieldatei etwas Kopfzerbrechen bereitet. Die Abfrage funktioniert nicht auf meinem System. Hast du es mit der Datei getestet?
Nichts desto Trotz hab ich es irgendwann hinbekommen und gebe dir nur mal meine Idee dazu zum Besten.
Du nutzt ziemlich viele globale Variablen. Deshalb kannst du auch Kundennummer und Datenbank in der befüllen sub zuweisen.
Das ist aber nur eine Variante. In Ermangelung tieferer Datenbank-Abfragekenntnisse hier mein trivialer Versuch.
IN GetRecordset müßte dann auch noch etwas umgebaut werden um deine IF-Verzweigung zum laufen zu bekommen.

Sub befuellen()
Datenbank = "Strassen"
Kundennummer = -1
Call ConnectDB
With ThisWorkbook.Worksheets(1)
Call leeren 'Combobox und Datenbereich in Tabelle leeren
.Range("M1").CopyFromRecordset rs
If .Range("M1").CurrentRegion.Count = 1 Then
.ComboBox1.AddItem = .Range("M1").CurrentRegion.Value
ElseIf Range("M1").CurrentRegion.Count > 1 Then
.ComboBox1.List = .Range("M1").CurrentRegion.Value
End If
End With
Call CloseRS
Call CloseDB
End Sub

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Combobox mit Werten aus einer Datenbank füllen


Schritt-für-Schritt-Anleitung

Um eine Combobox in Excel mit Werten aus einer MySQL-Datenbank zu füllen, kannst Du die folgenden Schritte befolgen:

  1. Datenbankverbindung herstellen: Stelle sicher, dass Du eine funktionierende Verbindung zu Deiner MySQL-Datenbank hast. Verwende dafür ADO (ActiveX Data Objects).

  2. SQL-Abfrage erstellen: Formuliere eine SQL-Abfrage, um die gewünschten Daten abzurufen. Zum Beispiel:

    SELECT Nachnamen FROM Namen
  3. Daten in ein Array laden: Nutze VBA, um die Daten abzurufen und in ein Array zu speichern. Hier ist ein Beispielcode:

    Sub befuellen()
       Dim uData As ADODB.Recordset
       Dim NamenArray As Variant
       ConnectDB
       Set uData = GetRecordset()
       NamenArray = uData.GetRows() ' Alle Zeilen in ein Array
       Worksheets(1).ComboBox3.List = Application.Transpose(NamenArray) ' Transponieren für die Combobox
    End Sub
  4. Combobox befüllen: Verwende die .List-Eigenschaft der Combobox, um das Array hinzuzufügen.

  5. Workbook_Open verwenden: Setze den Code in die Workbook_Open-Routine, um beim Öffnen der Datei die Combobox automatisch zu füllen.


Häufige Fehler und Lösungen

  1. Fehler: Nur die erste Zeile wird angezeigt
    Lösung: Stelle sicher, dass Du die .List-Eigenschaft anstelle von .AddItem verwendest, um mehrere Werte einzufügen:

    ComboBox1.List = ArrayValues
  2. Fehler: Datenbankverbindung funktioniert nicht
    Lösung: Überprüfe, ob die Verbindungszeichenfolge korrekt ist und ob Du die erforderlichen Bibliotheken referenziert hast (z.B. Microsoft ActiveX Data Objects).

  3. Fehler: Array enthält nur einen Wert
    Lösung: Stelle sicher, dass Du die GetRows-Methode verwendest, um alle Zeilen in ein Array zu laden.


Alternative Methoden

  • Daten direkt aus Excel: Wenn Deine Daten auch in einer Excel-Tabelle sind, kannst Du die Werte auch direkt über den ListFillRange-Parameter der Combobox zuweisen.
  • Power Query verwenden: Eine moderne Methode ist die Verwendung von Power Query, um Daten aus einer Datenbank zu importieren und in Excel anzuzeigen.

Praktische Beispiele

Hier ist ein einfaches Beispiel, um die Combobox mit Werten zu füllen:

Sub befuellen()
    Dim uData As ADODB.Recordset
    Dim NamenArray As Variant
    ConnectDB
    Set uData = GetRecordset()
    NamenArray = uData.GetRows()
    With Worksheets(1).ComboBox3
        .Clear
        .List = Application.Transpose(NamenArray)
    End With
    CloseDB
End Sub

In diesem Beispiel werden die Nachnamen aus der Tabelle "Namen" in die Combobox3 geladen.


Tipps für Profis

  • Verwende Fehlerbehandlung: Implementiere On Error Resume Next und On Error GoTo 0, um Fehler bei der Datenbankverbindung oder beim Zugriff auf die Combobox abzufangen.
  • Optimierung der SQL-Abfragen: Achte darauf, nur die benötigten Daten abzurufen, um die Performance zu verbessern.
  • Daten validieren: Überprüfe, ob die Daten vor dem Hinzufügen zur Combobox gültig sind.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die Combobox beim Öffnen der Datei automatisch befüllt wird?
Du musst den befüllenden Code in die Workbook_Open-Ereignisprozedur einfügen.

2. Was mache ich, wenn ich keine Verbindung zur Datenbank herstellen kann?
Überprüfe die Verbindungszeichenfolge und stelle sicher, dass alle erforderlichen Treiber und Bibliotheken installiert sind.

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