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

Forumthread: Automatischer VBA Aufruf nach SQL Daten

Automatischer VBA Aufruf nach SQL Daten
19.05.2020 10:18:40
Harry
Hallo,
ich verwende Excel recht oft um Daten aus unserem SQL Server darzustellen.
Nun bin ich auf der Suche wie ich, automatisch nachdem die Daten geladen wurden, ein VBA Skript ausführen kann.
Ich habe im Internet leider nichts passendes gefunden.
Das Problem ist, dass dies manchmal auch 10-20 Sekunden dauern kann und ein fixer Timer so schwer umzusetzen ist.
Danke,
Gruß Harry
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Sehr ungenaue Aufgabenbeschreibung
19.05.2020 10:32:24
Martin
Hallo Harry,
leider ist deine Aufgabenstellung so ungenau, dass ich nicht einmal verstehe wie die Daten vom SQL-Server nach Excel gelangen (per VBA?) von wo aus das Makro gestartet werden soll (fremde Anwendung?). Darum ein Schuss ins Blaue:
Du könntest mit einem VB-Script arbeiten. Hier mal ein Link in welche Richtung ich denke:
http://www.office-loesung.de/ftopic16793_0_0_asc.php
Viele Grüße
Martin
Anzeige
AW: Sehr ungenaue Aufgabenbeschreibung
19.05.2020 10:56:59
Harry
Hallo Martin,
sorry ich versuche es zu präzisieren.
Daten werden über Dialog Daten - Daten abrufen - aus anderen Quellen - aus Microsoft Query abgerufen.
Diese Daten können einerseits automatisch bei Öffnen von Excel oder nach Klick auf Daten- Alle aktualisieren - aktualisiert werden.
Dann werden die Daten aus dem SQL Server abgerufen und z.B. als Tabelle dargestellt.
Wenn die Daten nun vollständig abgerufen wurden (wie gesagt kann 1 Sekunde, aber bei mehr Daten auch 20 Sekunden benötigen) sollte ein VBA Makro aufgerufen werden.
Leider wird das Onchange Event Worksheet_Change nach dem Datenabruf nicht angetriggert. Sonst wäre dies die schönste Lösung.
Daher meine Frage ob ihr ein anderes Event oder ähnliches kennt welches nach dem Abschluss der Datenaktualisierung angstossen wird.
Ich hoffe dies ist verständlicher.
Gruß Harald
Anzeige
AW: Sehr ungenaue Aufgabenbeschreibung
19.05.2020 11:29:30
Martin
Hallo Harald,
ich kenne mich mit Microsoft Query zwar nicht so gut aus, aber nach kurzer Google-Suche bin ich auf das QueryTable_AfterRefresh-Ereignis gestoßen:
https://docs.microsoft.com/de-de/office/vba/api/excel.querytable.afterrefresh
Das klingt doch recht vielversprechend, oder?
Viele Grüße
Martin
Anzeige
AW: Sehr ungenaue Aufgabenbeschreibung
19.05.2020 11:53:11
Harry
Hallo Martin,
nein, dieses Ereignis wird leider auch nicht ausgelöst (hatte früher schon und habe ich gerade nochmals getestet).
Gruß Harald
AW: Sehr ungenaue Aufgabenbeschreibung
19.05.2020 12:36:05
Martin
Hallo Harald,
dann gebe ich dir mal noch diesen Link mit auf den Weg:
https://stackoverflow.com/questions/14667035/vba-for-excel-afterrefresh-event
Hier wurde mit einem Klassenmodul gearbeitet (siehe weiter unten bei der Antwort mit Class Module bzw. CQtEvents).
Und deine Events wurden hoffentlich nicht mit
Application.EnableEvents = False
deaktiviert?
Viele Grüße
Martin
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Automatischer VBA Aufruf nach SQL Daten


Schritt-für-Schritt-Anleitung

Um ein VBA-Skript automatisch auszuführen, nachdem Du Daten aus einem SQL-Server in Excel geladen hast, kannst Du das Ereignis QueryTable_AfterRefresh nutzen. Hier ist eine einfache Anleitung:

  1. Öffne Excel und lade deine Daten über den Dialog "Daten" -> "Daten abrufen" -> "Aus anderen Quellen" -> "Aus Microsoft Query".

  2. Erstelle ein neues Modul in deiner Excel-Arbeitsmappe:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
    • Klicke mit der rechten Maustaste auf "VBAProject (deineDatei.xlsx)" und wähle "Einfügen" -> "Modul".
  3. Füge den folgenden Code in das Modul ein:

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
       If Not Application.EnableEvents Then Exit Sub
       ' Hier kannst Du den Code für Dein VBA-Skript einfügen
       MsgBox "Daten wurden aktualisiert!"
    End Sub
  4. Füge den Code für das QueryTable_AfterRefresh-Ereignis hinzu:

    Private Sub QueryTable_AfterRefresh()
       ' Hier kannst Du Deinen VBA-Code einfügen
       Call DeinMakro
    End Sub
  5. Speichere Deine Änderungen und teste, ob das Makro nach der Aktualisierung der Daten ausgelöst wird.


Häufige Fehler und Lösungen

  • Ereignis wird nicht ausgelöst: Stelle sicher, dass Application.EnableEvents nicht auf False gesetzt ist. Überprüfe auch, ob Du das richtige Ereignis in dem entsprechenden Arbeitsblatt oder Modul platziert hast.

  • Makro wird nicht gefunden: Vergewissere Dich, dass der Name des Makros korrekt geschrieben ist und dass es im gleichen Projekt wie das QueryTable-Ereignis existiert.


Alternative Methoden

Eine andere Methode, um das VBA-Skript nach dem Abrufen der Daten auszuführen, ist die Verwendung eines Klassenmoduls.

  1. Erstelle ein Klassenmodul (z.B. CQtEvents):

    • Klicke mit der rechten Maustaste im VBA-Editor auf "Einfügen" -> "Klasse".
  2. Füge folgenden Code in das Klassenmodul ein:

    Public WithEvents qt As QueryTable
    
    Private Sub qt_AfterRefresh()
       ' Hier Deinen VBA-Code hinzufügen
       Call DeinMakro
    End Sub
  3. Instanziiere das Klassenmodul in einem regulären Modul:

    Dim qtEvents As CQtEvents
    
    Sub InitQueryTable()
       Set qtEvents = New CQtEvents
       Set qtEvents.qt = ThisWorkbook.Sheets("DeinArbeitsblatt").QueryTables(1)
    End Sub

Praktische Beispiele

Hier ist ein Beispiel für eine SQL-Abfrage mit VBA:

Sub AbrufenUndVerarbeiten()
    Dim qt As QueryTable
    Set qt = ThisWorkbook.Sheets("Daten").QueryTables.Add(Connection:="ODBC;DSN=DeinDSN;", Destination:=ThisWorkbook.Sheets("Daten").Range("A1"))

    qt.SQL = "SELECT * FROM DeineTabelle WHERE Bedingung"
    qt.Refresh
End Sub

Dieses Beispiel zeigt, wie Du mit SQL Excel VBA Daten abfragen und anschließend weiterverarbeiten kannst.


Tipps für Profis

  • Nutze vba sql where, um gezielte Abfragen zu erstellen, die nur die benötigten Daten zurückliefern.
  • Achte darauf, die Performance zu optimieren, indem Du nur die benötigten Daten abfragst und unnötige Spalten vermeidest.
  • Experimentiere mit vba and sql, um komplexere Abfragen zu erstellen, die mehrere Bedingungen berücksichtigen.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass das VBA-Skript immer ausgeführt wird?
Stelle sicher, dass das EnableEvents-Flag nicht deaktiviert ist und dass Du das Skript im richtigen Arbeitsmappen- oder Arbeitsblattmodul platzierst.

2. Was kann ich tun, wenn das QueryTable_AfterRefresh-Ereignis nicht funktioniert?
Prüfe, ob die Quelle des QueryTables korrekt ist und ob das Ereignis richtig in das entsprechende Modul eingefügt wurde. Alternativ kannst Du die Methode mit dem Klassenmodul ausprobieren.

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