.QueryTables.Refresh Backgroundquery:=True, keine Werte
24.11.2023 15:52:49
Philipp Broxtermann
ich möchte eine PowerQuery in ein Tabellenblatt laden.
Das entstandene QueryTable besteht aus einer Ergebniszeile.
Diese will ich kopieren und in eine andere Zeile kopieren.
Mit
QueryTables.Refresh Backgroundquery := false
funktioiniert es. Leider kann man dabei Excel nicht bedienen.
Wenn ich
QueryTables.Refresh Backgroundquery:=true setze und eine Schleife baue, die für eine Zeitlang läuft, damit die Abfrage im Hintergrund aktualisieren kann, kann ich zwar Excel bedienen, aber die QueryTable zeigt keine Werte an, auch wenn die PowerQuery Aktualisierung abgeschlossen wurde.
Daher wird nichts mehr kopiert. Stoppe ich dann den Code, werden die Ergebnisse plötzlich angezeigt.
Ich habe schon Dinge probiert wie
Application.ScreenUpdating = True
oder
ActiveSheets.Calculate
Ohne Erfolg.
Hat jemand eine Idee, wie QueryTables im Hintergrund aktualisiert und trotzdem die Werte auch im Sheet angezeigt werden, ohne das Makro zu stoppen?
Viele Grüße
Philipp
Code:
'Erstellt eine kombinierte PowerQuery aus vorher per VBA erstellen Einzelqueries
ActiveWorkbook.Queries.Add Name:="Anfügen", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Quelle = Table.Combine({ " & Queries & "})," & Chr(13) & "" & Chr(10) & " #""Transponierte Tabelle"" = Table.Transpose(Quelle)" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Transponierte Tabelle"""
With ActiveWorkbook.Sheets(1).ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=Anfügen;Extended Properties=""""" _
, Destination:=Range("$V$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [Anfügen]")
.RowNumbers = 0
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
'.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "Anfügen"
.Refresh BackgroundQuery:=True
End With
WaitTime = Now() + TimeValue("00:00:20") 'Schleife soll dem QueryTable Zeit zur Aktualisierung im Hintergrund geben
Do While Now() WaitTime
Application.ScreenUpdating = False
DoEvents
Loop
ActiveWorkbook.Sheets(1).Range("V3:AH3").Select 'Selektiert die Ergebniszeile des QueryTables auf dem Arbeitsblatt.
Selection.Copy
ActiveWorkbook.Sheets(1).Cells(row, 22).Select 'kopiert die Ergebniszeile in eine andere Zeile.
ActiveWorkbook.Sheets(1).Paste
ActiveWorkbook.Sheets(1).Cells(row, 19) = Now