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

Forumthread: Power Query mit VBA aktualisieren

Power Query mit VBA aktualisieren
27.08.2019 20:23:02
David
Hallo zusammen,
folgender Sachverhalt:
Datenblatt hat insgesamt 9 Tabellenblätter.
Bei einem dieser Tabellenblätter ("Input") ist eine Power Query hinterlegt, welche ganz grob gesagt, verschiedene anderen Datenblätter durchläuft, Daten zusammenstellt und nach einigen Filtern sortiert. Diese Daten werden dann auf dem Tabellenblatt Input ausgegeben.
Die Power Query funktioniert so, dass per Dropdown-Menü ein Wert ausgewählt wird, und dann die hinterlegten Datenblätter nach diesem Wert gefiltert und wie bereits geschrieben auf dem Blatt "Input" ausgegeben werden.
Das Dropdown-Menü ist definiert mit Werten welche auf dem Tabellenblatt "Inputdaten" aufgelistet sind.
Nun wird wie folgt vorgegangen:
Es wird der erste Wert (40) aus dem Dropdown ausgewählt, Power Query aktualisiert sich automatisch. Anschließend nachdem alles geladen ist wird per Makro die Datei abgespeichert unter einem definierten Namen, geschlossen und die "Masterdatei" erneut geöffnet. Anschließend geht es mit dem zweiten Wert (2690) weiter und das geht so weit, bis der letze Wert (9990) erreicht ist.
Es handelt sich insgesamt um 81 Werte.
Wir haben uns nun überlegt ob wir das ganze mit aktualisieren und abspeichern nicht per VBA automatisch ablaufen lassen können. Sprich die Werte in Spalte A auf dem Blatt "Inputdaten" mit Cells(i,1) definieren und das dann das VBA-Tool jeden einzelnen Wert (40, 2690, ... 9990) durchläuft, die Tabelle bzw. die Power Query aktualisiert und sobald alles geladen ist abspeichern etc.
Ich habe alle Codes bereits geschrieben, allerdings scheitert es daran, dass sich VBA die Werte aus "Inputdaten" ziehen soll und einen nach dem anderen nehmen soll und die Power Query aktualisieren.
Kann mir damit hier eventuell jemand weiterhelfen?
Vielen Dank!
David
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Power Query mit VBA aktualisieren
28.08.2019 09:26:42
Torsten
Hallo,
wenn du uns mal deine geheimen

Ich habe alle Codes bereits geschrieben
zeigen wuerdest, koennte man vielleicht helfen und schauen, wo es genau haengt.
AW: Power Query mit VBA aktualisieren
28.08.2019 10:23:33
David
Hallo Torsten,
sorry das habe ich vergessen:
Sub BP_2020_erstellen()
'Arbeitsmappen und Blattschutz ausschalten
For Each Blatt In ActiveWorkbook.Sheets
Blatt.Unprotect Password:="ilc"
Next
ActiveWorkbook.Unprotect Password:="XXX"
'Speichern der Datei unter Name in E37
Sheets("Deckblatt").Select
Range("E37").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Dim NeuerName As String
NeuerName = Range("E37").Select
ActiveWorkbook.SaveAs "\\hier steht der Ordnerpfad" & NeuerName
' Arbeitsblatt Input, Input Werte, Check ausblenden
Sheets("Input").Select
ActiveWindow.SelectedSheets.Visible = False
Sheets("Input Werte").Select
ActiveWindow.SelectedSheets.Visible = False
Sheets("Check").Select
ActiveWindow.SelectedSheets.Visible = False
' Konto-Filter setzen
' Mitarbeiter Zellen sperren
Sheets("Mitarbeiter").Select
Range("E13:H81").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("E13").Select
Sheets("Mitarbeiter").Select
Range("E13:H81").Select
'bereinigt pseude-leere Zellen im selektierten Zellbereich
Dim Zelle As Range, StatusCalc As Long
If ActiveSheet.Type = xlWorksheet Then
With Application
.ScreenUpdating = False
.EnableEvents = False
StatusCalc = .Calculation
.Calculation = xlCalculationManual
End With
For Each Zelle In Selection.Cells
If Not Zelle.HasFormula Then
If Not IsEmpty(Zelle) And Zelle.Value = "" Then
Zelle.ClearContents
End If
End If
Next
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = StatusCalc
End With
End If
Sheets("Mitarbeiter").Select
Range("E13:H81").Select
Selection.SpecialCells(xlCellTypeConstants, 23).Select
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Selection.Locked = True
Selection.FormulaHidden = False
Sheets("Mitarbeiter").Select
Range("E13").Select
' Arbeitsmappe und Blätter schützen
For Each Blatt In ActiveWorkbook.Sheets
Blatt.Protect Password:="ilc", DrawingObjects:=True, Contents:=True, Scenarios:=True
Next
ActiveWorkbook.Protect Password:="XXX", Structure:=True, Windows:=False
'Deckblatt auswählen
Sheets("Deckblatt").Select
Range("A1").Select
'Datei speichern und schließen
ActiveWorkbook.Save
' Mater Datei wieder öffnen
Workbooks.Open "Hier steht der Pfad der Masterdatei"
End Sub
und der Code, welcher die Werte aus "Inputdaten" auswählen soll:
Sub auswählen()
Dim i As Integer
For i = 1 To 4
ActiveSheet.Cells(5 + i, 1).Select
Call BP_2020_erstellen
Next i
End Sub

Anzeige
AW: Power Query mit VBA aktualisieren
28.08.2019 12:16:08
David
Die Fehlermeldung bzw. das Debuggen tritt i.d.R. an der Stelle
ActiveWorkbook.SaveAs "\\hier steht der Ordnerpfad" & NeuerName auf.
Habe NeuerName nun wie folgt neu definiert, da die Formel =verketten in Deckblatt E37 immer abhanden gekommen ist.
Sheets("Deckblatt").Select
Range("E37").Select
Range("E37") = "=CONCATENATE(""BP20_"",R[-19]C,""_"",R[-17]C)"
Range("E37").Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Dim NeuerName As String
NeuerName = Range("E37").Select
ActiveWorkbook.SaveAs
"Hier steht der Pfad des Ordners" & NeuerName
Die Fehlermeldung ist:
Laufzeitfehler '1004':
Auf die Datei konnte nicht zugegriffen werden. Versuchen Sie die folgenden Lösungsvorschläge:
- überprüfen Sie, ob der angegebene Ordner vorhanden ist (Ist er definitiv)
- stellen Sie sicher, dass der Ordner nicht schreibgeschützt ist (Ist er nicht)
- vergewissern Sie sich, dass der Dateiname keines der folgenden Zeichen enthält:
? []: | oder *
- der Dateiname darf nicht länger als 218 Zeichen sein.
Meiner Meinung nach, kann ich keinen der Lösungsvorschläge anwenden.
Was ebenfalls komisch ist, es wird eine Datei abgespeichert nachdem der Code durchgelaufen ist, allerdings unter dem Namen "Wahr".
Was ggf. sein kann, da die Namensvergebung der Dateien ja offensichtlich irgendwie falsch ist, das der Fehler darin liegt, dass sich die Datei nur abspeichert und nicht schließt. Sprich ich lasse den Code durchlaufen, es kommt die Fehlermeldung, eine Datei wird abgespeichert und meiner Meinung nach versucht Excel dann eine neue Datei ebenfalls unter "Wahr" abzuspeichern.
Hoffe es ist alles verständlich geschrieben.
Anzeige
AW: Power Query mit VBA aktualisieren
28.08.2019 13:07:40
Torsten
lass das .Select weg bei der Zuweisung fuer NeuerName. Du willst doch den Wert der Zelle uebergeben. Sie nicht selektieren.
Und ueberhaupt. Ueberarbeite deinen Code mal richtig. Die ganze Selektiererei ist zu 99% unnuetz. Macht den Code nur langsamer.
Gruss Torsten
AW: Power Query mit VBA aktualisieren
28.08.2019 13:41:07
Torsten
Also ich hab mir mal erlaubt etwas rumzudocktern an deinem Code. Denke es sollte so funktionieren. Falls Fragen aufkommen zu den Aenderungen oder irgendwas sollte nicht funktionieren, melde dich einfach. Kann es ja nicht testen.

Option Explicit
Sub BP_2020_erstellen()
'Arbeitsmappen und Blattschutz ausschalten
Dim Blatt As Worksheet
For Each Blatt In ActiveWorkbook.Sheets
Blatt.Unprotect Password:="ilc"
Next
ActiveWorkbook.Unprotect Password:="XXX"
'Speichern der Datei unter Name in E37
Sheets("Deckblatt").Range("E37").Copy
Sheets("Deckblatt").Range("E37").PasteSpecial xlPasteValues
Dim NeuerName As String
NeuerName = Sheets("Deckblatt").Range("E37")
ActiveWorkbook.SaveAs "\\hier steht der Ordnerpfad\" & NeuerName
' Arbeitsblatt Input, Input Werte, Check ausblenden
Sheets("Input").Visible = False
Sheets("Input Werte").Visible = False
Sheets("Check").Visible = False
' Konto-Filter setzen
' Mitarbeiter Zellen sperren
Sheets("Mitarbeiter").Range("E13:H81").Copy
Sheets("Mitarbeiter").Range("E13").PasteSpecial xlPasteValues
'bereinigt pseude-leere Zellen im selektierten Zellbereich
Dim Zelle As Range, StatusCalc As Long
If ActiveSheet.Type = xlWorksheet Then
With Application
.ScreenUpdating = False
.EnableEvents = False
StatusCalc = .Calculation
.Calculation = xlCalculationManual
End With
For Each Zelle In Selection.Cells
If Not Zelle.HasFormula Then
If Not IsEmpty(Zelle) And Zelle.value = "" Then
Zelle.ClearContents
End If
End If
Next
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = StatusCalc
End With
End If
With Sheets("Mitarbeiter").Range("E13:H81").SpecialCells(xlCellTypeConstants, 23).Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
.Locked = True
.FormulaHidden = False
End With
' Arbeitsmappe und Blätter schützen
For Each Blatt In ActiveWorkbook.Sheets
Blatt.Protect Password:="ilc", DrawingObjects:=True, Contents:=True, Scenarios:=True
Next
ActiveWorkbook.Protect Password:="XXX", Structure:=True, Windows:=False
'Deckblatt auswählen
Sheets("Deckblatt").Select
Range("A1").Select
'Datei speichern und schließen
ActiveWorkbook.Save
' Mater Datei wieder öffnen
Workbooks.Open "Hier steht der Pfad der Masterdatei"
End Sub

Gruss
Anzeige
AW: Power Query mit VBA aktualisieren
28.08.2019 13:47:08
David
Hallo Torsten,
nun habe ich das Problem, dass das Makro nicht wartet bis die Power Query durchgelaufen ist. Sprich der Code
Application.Run _
"'PERSONAL.xlsb'!Tabelle_Aktualisieren"
Sub Tabelle_Aktualisieren()
ActiveWorkbook.RefreshAll
End Sub
wartet nicht bis alle Abfragen der Power Query durch sind und speichert zwar die Dateien unter dem definierten Namen, allerdings mit den selben Inhalten.
Ich werde immer nach dem Starten des Codes gefragt: "Durch diese Aktion wird eine anstehende Datenaktualisierung abgebrochen. Fortfahren?"
Da kann ich nur OK für abrechen der Datenaktualisierung klicken oder Abbrechen.
Gibt es eine Möglichkeit dem Makro zu sagen, aktualisiere die Power Query, warte bis alles abgeschlossen ist und dann erst abspeichert usw?
Gruß,
David
Anzeige
AW: Power Query mit VBA aktualisieren
28.08.2019 14:15:57
Torsten
Sowieso kann ich nirgendwo irgendetwas sehen, wo ein power query aktualisiert wird. Wo ist der code dafuer?
AW: Power Query mit VBA aktualisieren
28.08.2019 14:15:58
Torsten
Sowieso kann ich nirgendwo irgendetwas sehen, wo ein power query aktualisiert wird. Wo ist der code dafuer?
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
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

Power Query mit VBA automatisieren


Schritt-für-Schritt-Anleitung

  1. VBA-Umgebung öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Modul erstellen: Klicke mit der rechten Maustaste auf VBAProject (DeineDatei.xlsx) und wähle Einfügen -> Modul.

  3. Code zum Aktualisieren der Power Query einfügen:

    Sub Tabelle_Aktualisieren()
       ActiveWorkbook.RefreshAll
    End Sub
  4. Code zum Speichern und Schließen der Datei anpassen: Füge den folgenden Code in dein bestehendes Makro ein:

    Dim NeuerName As String
    NeuerName = Sheets("Deckblatt").Range("E37").Value
    ActiveWorkbook.SaveAs "\\hier steht der Ordnerpfad\" & NeuerName
  5. Warten auf Aktualisierung: Um sicherzustellen, dass die Power Query aktualisiert ist, bevor das Makro fortsetzt, verwende die folgende Schleife:

    Do While Application.CalculationState <> xlDone
       DoEvents
    Loop
  6. VBA-Tool zum Durchlaufen der Werte: Erstelle eine Schleife, die durch die Werte in der Spalte A (Inputdaten) iteriert:

    Sub auswählen()
       Dim i As Integer
       For i = 1 To 81 ' Anzahl der Werte
           ActiveSheet.Cells(i + 4, 1).Value ' Werte aus Spalte A auslesen
           Call BP_2020_erstellen
       Next i
    End Sub

Häufige Fehler und Lösungen

  • Laufzeitfehler '1004': Überprüfe, ob der angegebene Ordner existiert und nicht schreibgeschützt ist. Achte darauf, dass der Dateiname keine ungültigen Zeichen enthält.

  • Power Query aktualisiert nicht: Stelle sicher, dass der Code zur Aktualisierung der Power Query korrekt implementiert ist. Verwende ActiveWorkbook.RefreshAll und warte, bis die Aktualisierung abgeschlossen ist.

  • Fehler bei der Dateispeicherung: Vermeide die Verwendung von .Select beim Zuweisen von Werten. Schreibe stattdessen direkt:

    NeuerName = Sheets("Deckblatt").Range("E37").Value

Alternative Methoden

  • Power Query automatisch aktualisieren: Du kannst die Power Query so konfigurieren, dass sie beim Öffnen der Datei automatisch aktualisiert wird. Gehe zu den Abfrageeinstellungen und aktiviere die Option "Daten beim Öffnen der Datei aktualisieren".

  • Verwendung von Power BI: Wenn du regelmäßig Daten aktualisieren musst, könnte Power BI eine Alternative sein. Hier kannst du Automatisierungen mit VBA und Power BI kombinieren.


Praktische Beispiele

Hier ist ein einfaches Beispiel, das zeigt, wie du die oben genannten Schritte in einem vollständigen Makro umsetzen kannst:

Sub AutomatisierePowerQuery()
    Dim i As Integer
    Dim NeuerName As String

    For i = 1 To 81 ' Anzahl der Werte
        Sheets("Inputdaten").Cells(i + 4, 1).Value ' Werte einfügen
        Call Tabelle_Aktualisieren ' Power Query aktualisieren

        ' Warten auf Abschluss
        Do While Application.CalculationState <> xlDone
            DoEvents
        Loop

        NeuerName = Sheets("Deckblatt").Range("E37").Value
        ActiveWorkbook.SaveAs "\\hier steht der Ordnerpfad\" & NeuerName
    Next i
End Sub

Tipps für Profis

  • Verwende Error Handling: Implementiere Fehlerbehandlung in deinem Code, um unerwartete Fehler abzufangen und die Ausführung zu steuern.

  • Optimierung: Reduziere die Verwendung von .Select und .Activate, um die Ausführungsgeschwindigkeit zu erhöhen.

  • Dokumentation: Kommentiere deinen Code für bessere Nachvollziehbarkeit und Wartbarkeit.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die Power Query vor dem Speichern aktualisiert wird? Du kannst die Do While Schleife verwenden, um sicherzustellen, dass die Aktualisierung abgeschlossen ist, bevor du speicherst.

2. Was passiert, wenn ich beim Speichern einen Fehler erhalte? Überprüfe die Pfadangaben und die Berechtigungen des Speichermediums. Achte darauf, dass der Dateiname korrekt ist und keine ungültigen Zeichen enthält.

3. Kann ich Power Query auch ohne VBA aktualisieren? Ja, du kannst Power Query so einstellen, dass sie beim Öffnen der Datei oder in festgelegten Intervallen automatisch aktualisiert wird.

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