Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA /
#1
Hallo,
ich habe eine Excel-Datei in der mehrere Daten per PowerQuery abgefragt werden (aktuell 12 Abfragen).
Ich habe einen VBA-Button eingerichtet, der diese Daten aktualisiert (ThisWorkbook.RefreshAll).
Jetzt möchte ich eine Fertigmeldung einrichten, die über den Fortschritt informiert (1/12 .... 2/12 .... 3/12 .... ).

Via Google habe ich hierzu auch ein schönes Script gefunden:

Code:
'Hier die Deklaration im allgemeinen Teil
Public WithEvents qt1 As QueryTable
Public WithEvents qt2 As QueryTable
Public WithEvents qt3 As QueryTable
Public qts1 As Boolean
Public qts2 As Boolean
Public qts3 As Boolean

'Beim öffnen der Arbeitsmappe werden die Variablen belegt
Private Sub Workbook_Open()
qts1 = False
qts2 = False
qts3 = False
Set qt1 = ThisWorkbook.Worksheets("Daten").QueryTables("Abfrage_Daten")
Set qt2 = ThisWorkbook.Worksheets("Daten").QueryTables("Abfrage_Auswahl")
Set qt3 = ThisWorkbook.Worksheets("Rohdaten").QueryTables("Abfrage_Roh")
'Hier kann aber auch anstelle der Namen mit Index gearbeitet werden
'Set qt1 = ThisWorkbook.Worksheets(1).QueryTables(1)
'Set qt2 = ThisWorkbook.Worksheets(1).QueryTables(2)
'Set qt3 = ThisWorkbook.Worksheets(2).QueryTables(1)
End Sub

'Ab hier werden die Ereignisse überwacht:
Private Sub qt1_afterRefresh(ByVal success As Boolean)
If success Then
qts1 = True
MsgBox "Abfrage_Daten vom Arbeitsblatt >>Daten<< wurde aktualisiert"
If qts1 And qts2 And qts3 Then
MsgBox "alles aktualisiert"
End If
End If
End Sub

Jetzt suche ich allerdings nach einer Möglichkeit alle QueryTables aufzulisten, zu zählen und per Scheife zu durchlaufen ohne im Code alle Namen einzeln aufzuführen.

Wie könnte das laufen?

Gruß,
Kevin
Antworten Top
#2
(23.04.2024, 06:55)KevinT schrieb: Ich habe einen VBA-Button eingerichtet, der diese Daten aktualisiert (ThisWorkbook.RefreshAll).
Warum? Mit VBA blockierst du Excel bis der Code fertig ist.
Außerdem hat Excel den Knopf standardmäßig eingebaut. Und wer lustig ist kann den Knopf auch noch in die Symbolleiste für den Schnellzugriff einfügen.

(23.04.2024, 06:55)KevinT schrieb: Jetzt möchte ich eine Fertigmeldung einrichten, die über den Fortschritt informiert (1/12 .... 2/12 .... 3/12 .... ).
Super Idee um die Laufzeit zu verlängern.
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

Antworten Top
#3
beide Punkte sind nötig, da ich nicht selbst alleiniger Nutzer der Datei bin.

Ständige Rückfragen: 
    "Wo finde ich den Knopf zum Aktualisieren?"
    "Wo sehe ich, dass die Aktualisierung abgeschlossen ist oder ob sie noch läuft?"
Antworten Top
#4
Wenn PQ zu lange dauert sollte man die Datenstruktur neu gestalten.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#5
Moin,

inhaltlich stimme ich shift-delbzu, allerdings ist Eventhandling in Klassen ein spannendes Thema. Du brauchst im Prinzip eine Hilfsklasse, die das Eventhandling einer QT übernimmt. Anschließend musst du für jede QT ein Objekt der Hilfsklasse erstellen und in einer Collection sammeln.

Wenn ich gleich mal Zeit finde, bereite ich was vor.

Viele Grüße 
derHöpp
Antworten Top
#6
(23.04.2024, 08:25)KevinT schrieb:     "Wo finde ich den Knopf zum Aktualisieren?"
Einmal zeigen. Nie wieder vergessen.
https://support.content.office.net/de-de...5f4526.jpg

(23.04.2024, 08:25)KevinT schrieb:     "Wo sehe ich, dass die Aktualisierung abgeschlossen ist oder ob sie noch läuft?"
Links in der Statusleiste.
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

Antworten Top
#7
Hallöchen,

mal abgesehen von den Problemen:

ThisWorkbook.Queries.Count

liefert Dir die Anzahl der Abfragen. Den Fortschritt könntest Du auch in einer (temporären) Textbox oder der Statuszeile (Application.StatusBar) von Excel ausgeben.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#8
Moin,

merkwürdigerweise erzeugt PQ bei mir keine Querytables auf den Arbeitsblättern. Ich komme also bei meinen Tests nicht an das Eventhandling heran.

Viele Grüße 
derHöpp
Antworten Top
#9
https://www.ms-office-forum.net/forum/sh...p?t=389149
Antworten Top
#10
Hallöchen,

MS schreibt dazu:

QueryTable object (Excel)
Represents a worksheet table built from data returned from an external data source, such as a SQL server or a Microsoft Access database.

Stimmt aber wohl auch nicht, eine Abfrage auf eine Access DB bringt das nicht.

Habe dann mal die Listobjects und die Queries gezählt. Alle über Abfragen erzeugten Listen und auch einfache Listen werden als Listobject gezählt, Abfragen (Thisworkbook.Queries) eben dort.

(Pivottabellen werden nicht als Abfrage gezählt)

weiter, bei google mal geschaut, was da los ist. z.B. bei StackOberfloh erfährt man
If you added your QT via the Data/Get External Data Ribbon menu, what you added was actually a ListObject.

Habe mir nun die Listobjects angeschaut. Da findet man je nach Quelle nun die zugehörige QueryTable mit ihren Eigenschaften oder eben den <...Fehler> bei Listen ohne. Womit dann für weitere Aktionen wohl je nach Informationsstand zur QT gezielte Ansprache oder eine Schleife infrage kommt.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste