Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: SQL-Abfragen per VBA ausführen

SQL-Abfragen per VBA ausführen
Joni
Hi,
ich setze mich erstmalig mit der Abfrage von Daten mittels Excel aus einer Oracledatenbank auseinander. Dazu habe ich folgende Frage. Ich habe eine Mappe mit 2 Tabellenblätter die jeweils eine Abfrage enthalten. Die Daten werden auch problemlos abgefragt. Jetzt sollte ich für beide Abfragen ein Abfragekriterium (jeweils das gleiche Kriterium) ändern. In der einen Abfrage kommt es 1 x vor (diese kann noch mit dem Assisten in Excel bearbeitet werden) in der anderen Abfrage 2 x (die ist zu komplex und muss mit MS Query bearbeitet werden). Wie schaffe ich es jetzt, dass ich beim Öffnen der Mappe gefragt werde, welches Kriterium angefragt werden soll? Die Abfragen sind auch als .dqy-File verfügbar (da kann ich das Kriterium mit suchen/ersetzen austauschen; doch das wirkt sich nicht auf die gespeicherte Abfrage in der Mappe aus).
Ich hoffe das war verständlich. Das ist für mich noch Neuland und ich muss da zuerst mal einen Überblick kriegen. Danke für eure Hilfe.
Gruß Joni
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: SQL-Abfragen per VBA ausführen
06.12.2010 19:50:47
GTFuchs
Hallo Joni,
mal ein kleines Beispiel wie per variablem SQL eine Pivottabelle gefüllt wird, ich mach sowas jetzt öfter, habe es auch erst vor kurzem gelernt. Ist kein Code den Du einfach so kopieren, einfach so als Ideenquelle, SQL irgendwie zusammenbauen und abschicken.
Sub DWH_Update_vg_FiBuSaldenliste()
Dim SQL As String
SQL = "Select * FROM vg_FiBuSaldenliste"
DWH_Update_Pivottabelle "DWH_FiBuSaldenliste", "vg_FiBuSaldenliste", SQL, " _
vg_FiBuSaldenliste"
End Sub
Function DWH_Update_Pivottabelle(Verbindungsname As String, Pivottabelle As String, SQL As  _
String, Optional Objekt As String)
' Diese Funktion aktualisiert eine Pivottabelle die sich auf das DWH bezieht
' Die Funktion prüft vorab ob das Quellobject für die Daten (Tabelle / View / Prozedur...)  _
vorhanden ist
' Die Funktion schreibt die letzten Updatedaten in den Kopfbereich der Tabelle
DWH_Parameter_setzen
'Prüfung ob die Quelltabelle Sicht für diese Pivottabelle existiert
If Not Objekt = "" Then
If Not teste_ExistenzObjekt(DWH_DB, Objekt) Then
MsgBox "Nicht erfolgreich, bitte Verbindung prüfen"
Exit Function
End If
End If
'Pivotverbindung aktualisieren und SQL Befehl übergeben - erst ab Excel 2007
'aktualisiere_DBVerbindung Verbindungsname, DWH_DB, SQL
'Pivotverbindung aktualisieren und SQL Befehl übergeben - funktionert ab Excel 2003
aktualisiere_Pivotverbindung Pivottabelle, DWH_DB, SQL
ActiveSheet.PivotTables(Pivottabelle).RefreshTable
'Persistentzkennzeichen setzen
If DWH_DB.Cache Then
ActiveSheet.PivotTables(Pivottabelle).SaveData = True
ActiveSheet.PivotTables(Pivottabelle).PivotCache.MissingItemsLimit = xlMissingItemsMax
Else
ActiveSheet.PivotTables(Pivottabelle).SaveData = False
ActiveSheet.PivotTables(Pivottabelle).PivotCache.MissingItemsLimit = xlMissingItemsNone
End If
ActiveWorkbook.ShowPivotTableFieldList = False
'Updateinfos setzen
DBSet_UpdateInfo_Server DWH_DB.Server, DWH_DB.DB
End Function
Sub aktualisiere_Pivotverbindung(Verbindungsname As String, DB As DB, SQL)
'Diese Funktion stellt die Kompatibiltät mit Excel 2003 sicher, ab 2007 reicht die Prozedur  _
aktualisiere_DBVerbindung
Dim pt As PivotTable
Set pt = ActiveWorkbook.ActiveSheet.PivotTables(Verbindungsname)
With pt.PivotCache
.CommandText = SQL
.CommandType = xlCmdSql
.Connection = "OLEDB;Provider=SQLOLEDB.1" _
& DB.Security _
& ";Persist Security Info=True" _
& ";Initial Catalog=" & DB.DB _
& ";Data Source =" & DB.Server _
& ";Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4099;Use Encryption for  _
Data=False" _
& ";Tag with column collation when possible=False"
.RefreshOnFileOpen = False
.SavePassword = False
.BackgroundQuery = False
End With
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

SQL-Abfragen per VBA ausführen


Schritt-für-Schritt-Anleitung

Um eine SQL-Abfrage per VBA in Excel auszuführen, kannst du folgende Schritte befolgen:

  1. Entwicklertools aktivieren: Stelle sicher, dass die Entwicklertools in Excel aktiviert sind. Gehe zu Datei > Optionen > Menüband anpassen und aktiviere die Entwicklertools.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Modul erstellen: Klicke mit der rechten Maustaste auf VBAProject (DeineMappe) und wähle Einfügen > Modul.

  4. VBA-Code eingeben: Füge den folgenden Code ein:

    Sub ExecuteSQLQuery()
       Dim conn As Object
       Dim rs As Object
       Dim SQL As String
    
       ' Verbindung zur Datenbank herstellen
       Set conn = CreateObject("ADODB.Connection")
       conn.Open "Provider=OraOLEDB.Oracle;Data Source=DeineDatenbank;User Id=DeinBenutzername;Password=DeinPasswort;"
    
       ' SQL-Abfrage definieren
       SQL = "SELECT * FROM DeineTabelle WHERE Kriterium = 'DeinWert'"
    
       ' SQL-Abfrage ausführen
       Set rs = conn.Execute(SQL)
    
       ' Daten in Excel einfügen
       Sheets("Datenblatt").Range("A1").CopyFromRecordset rs
    
       ' Objekte schließen
       rs.Close
       conn.Close
       Set rs = Nothing
       Set conn = Nothing
    End Sub
  5. Code anpassen: Ersetze DeineDatenbank, DeinBenutzername, DeinPasswort, DeineTabelle und DeinWert mit deinen spezifischen Werten.

  6. Makro ausführen: Gehe zurück zu Excel, drücke ALT + F8, wähle ExecuteSQLQuery und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Fehler: Verbindung zur Datenbank kann nicht hergestellt werden
    Lösung: Überprüfe deine Verbindungszeichenfolge. Stelle sicher, dass der Datenbankname, Benutzername und Passwort korrekt sind.

  • Fehler: SQL-Abfrage liefert keine Ergebnisse
    Lösung: Überprüfe die SQL-Abfrage auf Syntaxfehler und stelle sicher, dass die Tabelle und das Kriterium existieren.

  • Fehler: Laufzeitfehler 91
    Lösung: Dieser Fehler tritt auf, wenn das Recordset nicht richtig initialisiert ist. Stelle sicher, dass die Verbindung zur Datenbank erfolgreich war.


Alternative Methoden

  • MS Query verwenden: Du kannst auch MS Query verwenden, um SQL-Abfragen direkt in Excel zu erstellen. Dies ist besonders nützlich, wenn du komplexere Abfragen benötigst.

  • Power Query: Eine weitere Möglichkeit ist die Nutzung von Power Query, um Daten aus einer Datenbank zu importieren und transformationen durchzuführen. Dies ist besonders benutzerfreundlich und erfordert keine Programmierkenntnisse.


Praktische Beispiele

  1. Daten nach Kriterium filtern: Wenn du nur bestimmte Daten abfragen möchtest, kannst du dein SQL so anpassen:

    SQL = "SELECT * FROM DeineTabelle WHERE Kriterium = 'Wert1' OR Kriterium = 'Wert2'"
  2. Daten aggregieren: Um Daten zu summieren, kannst du die SQL-Abfrage wie folgt anpassen:

    SQL = "SELECT SUM(Betrag) AS Gesamtbetrag FROM DeineTabelle"
  3. Dynamisches Kriterium: Um beim Öffnen der Mappe nach einem Kriterium zu fragen, kannst du folgenden Code verwenden:

    Dim Kriterium As String
    Kriterium = InputBox("Bitte Kriterium eingeben:")
    SQL = "SELECT * FROM DeineTabelle WHERE Kriterium = '" & Kriterium & "'"

Tipps für Profis

  • Verwendung von Parametern: Um SQL-Injection zu vermeiden, solltest du Parameter in deinen SQL-Abfragen verwenden. Dies verbessert die Sicherheit deiner Abfragen.

  • Fehlerbehandlung implementieren: Füge Fehlerbehandlungsroutinen in deinen Code ein, um unerwartete Fehler zu erkennen und zu beheben.

  • Performance optimieren: Achte darauf, dass deine SQL-Abfragen optimiert sind, um die Performance deines Excel-Dokuments nicht zu beeinträchtigen.


FAQ: Häufige Fragen

1. Wie kann ich eine VBA SQL Abfrage ausführen?
Du kannst eine VBA SQL Abfrage ausführen, indem du eine Verbindung zur Datenbank herstellst und die SQL-Abfrage mit der Execute-Methode ausführst.

2. Funktioniert das auch mit Excel 2016?
Ja, die beschriebenen Methoden funktionieren auch in Excel 2016 und höheren Versionen.

3. Kann ich auch auf eine MySQL-Datenbank zugreifen?
Ja, du kannst auch auf eine MySQL-Datenbank zugreifen, indem du die entsprechende ODBC-Verbindung in der Verbindungszeichenfolge verwendest.

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