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

VBA Quellenänderung

Forumthread: VBA Quellenänderung

VBA Quellenänderung
07.04.2020 07:53:51
Julien
Guten Morgen,
ich nutze ein Makro um eine PowerQuery-Tabelle aus mehreren Arbeitsmappen zu erstellen. Funktioniert auch alles gut, solange ich den Pfad direkt als Quelle eintrage:
Quelle = Folder.Files(""C:\User\Desktop\Beispiel"")
Ich würde den Pfad aber gerne über eine Variable bestimmen. Weise ich einer Variable mit dem Datentyp String exakt den Pfad zu, den ich oben verwende und binde diese ein:
Quelle = Folder.Files(Pfad)
bekomme ich folgenden Fehler:
Laufzeitfehler 1004:
[Expression.Error] Der Import "Pfad" eintspricht keinem Export. Dies ist möglicherweise auf einen fehlenden Modulverweis zurückzuführen.

Ich habe die Quelle auch schon in Anführungszeichen gesetzt: ("Pfad"), bekomme dann jedoch einen Syntaxfehler.
Würde mich sehr freuen, wenn mir jemand bei meinem Problem weiterhelfen kann.
LG
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Quellenänderung
07.04.2020 08:05:38
ChrisL
Hi Julian
Deinen Code kenne ich nicht, darum ein Schuss ins Blaue...
"Quelle = Folder.Files(""""" & strTest & """"")"
cu
Chris
AW: VBA Quellenänderung
07.04.2020 08:14:48
Julien
Hi Chris,
ich hab gerade mal deinen Vorschlag getestet, Ergebnis das selbe.
Ich schicke mal meinen Code mit, auch wenn die Formatierung sehr unübersichtlich ist. Ich markiere aber mal den Part der Quellenänderung:
Sub PowerQueryTableMakro()
' PowerQueryTableMakro Makro
Dim Pfad As String
Pfad = Chr(34) & Chr(34) & "C:\User\Desktop\Beispiel" & Chr(34) & Chr(34)
ActiveWorkbook.Queries.Add Name:="E_Daten_Sammelbecken", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Quelle = Folder.Files(Pfad)," & Chr(13) & "" & _
Chr(10) & "    #""Hinzugefügte benutzerdefinierte Spalte"" = Table.AddColumn(Quelle, ""Inhalt"", each Excel.Workbook([Content]))," & Chr(13) & "" & Chr(10) & "    #""Erweiterte Inhalt"" = Table.ExpandTableColumn(#""Hinzugefügte benutzerdefinierte Spalte"", ""Inhalt"", {""Name"", ""Data"", ""Item"", ""Kind"", ""Hidden""}, " & _
"{""Inhalt.Name"", ""Inhalt.Data"", ""Inhalt.Item"", ""Inhalt.Kind"", ""Inhalt.Hidden""} _
)," & Chr(13) & "" & Chr(10) & "    #""Hinzugefügte benutzerdefinierte Spalte1"" = Table.AddColumn(#""Erweiterte Inhalt"", ""Benutzerdefiniert"", each Table.PromoteHeaders([Inhalt.Data]))," & Chr(13) & "" & Chr(10) & "    #""Erweiterte Benutzerdefiniert"" = Table.ExpandTableColumn(#""Hinzugefügte benutzerdefinierte Spalte1"", ""Benutze" & _
"rdefiniert"", {""Ortskennzeichen"", ""Orts-/ Hauptschalterbezeichnung"", ""abweichende  _
Netzspannung"", ""gesamte Schrankbreite [mm]"", ""Schrankhöhe [mm]"", ""Schranktiefe [mm]"", ""Schranksockel [mm]"", ""Aufbau des Schaltschrankes in Feldern"", ""Position Einspeisung x-te Tür von links"", ""Nennstrom der Einspeisung"", ""Hauptschalter Nennstrom"", ""Vorsicherung E" & _
"inspeisung (minimal)"", ""Vorsicherung Einspeisung (maximal) "", ""Anzahl Phase x  _
Leiter x  min - max Querschnitt"", ""Neutralleiter erforderlich?"", ""Kann Neutralleiter auf 1/2 Phase reduziert werden?"", ""Anzahl Leiter  x min - max Querschnitt für N"", ""Kann der PE auf 1/2 Phase reduziert werden?"", ""Anzahl x min - max Querschnitt für PE"", ""Wirkleistung [kW]" & _
""", ""Scheinleistung [kVA]"", ""Cos Phi"", ""Verlustleistung [kW]"", ""RF Auftrags-Nr." _
", ""Lieferant"", ""Ersteller"", ""Komponente"", ""Datum"", ""Status"", ""Spannung [V]"", ""Frequenz [Hz]""}, {""Ortskennzeichen"", ""Orts-/ Hauptschalterbezeichnung"", ""abweichende Netzspannung"", ""gesamte Schrankbreite [mm]"", ""Schrankhöhe [mm]"", ""Schranktiefe [mm]"", ""Sch" & _
"ranksockel [mm]"", ""Aufbau des Schaltschrankes in Feldern"", ""Position Einspeisung x- _
te Tür von links"", ""Nennstrom der Einspeisung"", ""Hauptschalter Nennstrom"", ""Vorsicherung Einspeisung (minimal)"", ""Vorsicherung Einspeisung (maximal) "", ""Anzahl Phase x Leiter x  min - max Querschnitt"", ""Neutralleiter erforderlich?"", ""Kann Neutralleiter auf 1/2 Phase " & _
"reduziert werden?"", ""Anzahl Leiter  x min - max Querschnitt für N"", ""Kann der PE  _
auf 1/2 Phase reduziert werden?"", ""Anzahl x min - max Querschnitt für PE"", ""Wirkleistung [kW]"", ""Scheinleistung [kVA]"", ""Cos Phi"", ""Verlustleistung [kW]"", ""RF Auftrags-Nr."", ""Lieferant"", ""Ersteller"", ""Komponente"", ""Datum"", ""Status"", ""Spannung [V]"", ""Frequen" & _
"z [Hz]""})," & Chr(13) & "" & Chr(10) & "    #""Entfernte Spalten"" = Table. _
RemoveColumns(#""Erweiterte Benutzerdefiniert"",{""Content"", ""Name"", ""Extension"", ""Date accessed"", ""Date modified"", ""Date created"", ""Attributes"", ""Folder Path"", ""Inhalt.Name"", ""Inhalt.Data"", ""Inhalt.Item"", ""Inhalt.Kind"", ""Inhalt.Hidden""})," & Chr(13) & "" & Chr(10) & "    #""Gefilterte Zeilen"" = Table.SelectRows(#""Entfe" & _
"rnte Spalten"", each [Ortskennzeichen]  null and [Ortskennzeichen]  """")," & Chr( _
13) & "" & Chr(10) & "    #""Geänderter Typ"" = Table.TransformColumnTypes(#""Gefilterte Zeilen"",{{""Wirkleistung [kW]"", Int64.Type}, {""Scheinleistung [kVA]"", Int64.Type}, {""Datum"", type date}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""Geänderter Typ"""
Sheets.Add After:=ActiveSheet
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location= _
E_Daten_Sammelbecken;Extended Properties=""""" _
, Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [E_Daten_Sammelbecken]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = False
.ListObject.DisplayName = "E_Daten_Sammelbecken"
.Refresh BackgroundQuery:=False
End With
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
End Sub

Anzeige
AW: VBA Quellenänderung
07.04.2020 08:50:34
ChrisL
Hi
funktioniert...
ActiveWorkbook.Queries.Add Name:="E_Daten_Sammelbecken", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Quelle = Folder.Files(""""" & Pfad & """"")," & Chr(13)
cu
Chris
AW: VBA Quellenänderung
07.04.2020 09:13:55
Julien
Erstmal vielen Dank für deine Mühe, hattest recht, habe 4x " anstatt 5x verwendet gehabt.
Jetzt kommt aber direkt der nächste Fehler:
[Expression.Error] Der Name "Source" wurde nicht erkannt. Ist er richtig geschrieben.
Habe dann in die PowerQuery Abfrage geguckt und diese sagt mir:
Expression.SyntaxError: Erwartetes Token: Comma.
let
Quelle = Folder.Files(""C:\User\Desktop\Beispiel,
#""Hinzugefügte benutzerdefinierte Spalte"" = Table.AddColumn(Quelle, ""Inhalt"",  _
each Excel.Workbook([Content]))," & Chr(13) & "" & Chr(10) & "    #""Erweiterte Inhalt"" = Table.ExpandTableColumn(#""Hinzugefügte benutzerdefinierte Spalte"", ""Inhalt"", {""Name"", ""Data"", ""Item"", ""Kind"", ""Hidden""}, " & _
"{""Inhalt.Name"", ""Inhalt.Data"", ""Inhalt.Item"", ""Inhalt.Kind"", ""Inhalt.Hidden""} _
_
)," & Chr(13) & "" & Chr(10) & "    #""Hinzugefügte benutzerdefinierte Spalte1"" = Table. _
AddColumn(#""Erweiterte Inhalt"", ""Benutzerdefiniert"", each Table.PromoteHeaders([Inhalt.Data]))," & Chr(13) & "" & Chr(10) & "    #""Erweiterte Benutzerdefiniert"" = Table.ExpandTableColumn(#""Hinzugefügte benutzerdefinierte Spalte1"", ""Benutze" & _
"rdefiniert"", {""Ortskennzeichen"", ""Orts-/ Hauptschalterbezeichnung"", ""abweichende  _
_
Netzspannung"", ""gesamte Schrankbreite [mm]"", ""Schrankhöhe [mm]"", ""Schranktiefe [mm]"", "" _
Schranksockel [mm]"", ""Aufbau des Schaltschrankes in Feldern"", ""Position Einspeisung x-te Tür von links"", ""Nennstrom der Einspeisung"", ""Hauptschalter Nennstrom"", ""Vorsicherung E" & _
"inspeisung (minimal)"", ""Vorsicherung Einspeisung (maximal) "", ""Anzahl Phase x  _
Leiter x  min - max Querschnitt"", ""Neutralleiter erforderlich?"", ""Kann Neutralleiter auf 1/ _
2 Phase reduziert werden?"", ""Anzahl Leiter  x min - max Querschnitt für N"", ""Kann der PE auf 1/2 Phase reduziert werden?"", ""Anzahl x min - max Querschnitt für PE"", ""Wirkleistung [kW]" & _
""", ""Scheinleistung [kVA]"", ""Cos Phi"", ""Verlustleistung [kW]"", ""RF Auftrags-Nr." _
_
", ""Lieferant"", ""Ersteller"", ""Komponente"", ""Datum"", ""Status"", ""Spannung [V]"", "" _
Frequenz [Hz]""}, {""Ortskennzeichen"", ""Orts-/ Hauptschalterbezeichnung"", ""abweichende Netzspannung"", ""gesamte Schrankbreite [mm]"", ""Schrankhöhe [mm]"", ""Schranktiefe [mm]"", ""Sch" & _
"ranksockel [mm]"", ""Aufbau des Schaltschrankes in Feldern"", ""Position Einspeisung x- _
_
te Tür von links"", ""Nennstrom der Einspeisung"", ""Hauptschalter Nennstrom"", ""Vorsicherung  _
Einspeisung (minimal)"", ""Vorsicherung Einspeisung (maximal) "", ""Anzahl Phase x Leiter x  min - max Querschnitt"", ""Neutralleiter erforderlich?"", ""Kann Neutralleiter auf 1/2 Phase " & _
"reduziert werden?"", ""Anzahl Leiter  x min - max Querschnitt für N"", ""Kann der PE   _
_
auf 1/2 Phase reduziert werden?"", ""Anzahl x min - max Querschnitt für PE"", ""Wirkleistung [ _
kW]"", ""Scheinleistung [kVA]"", ""Cos Phi"", ""Verlustleistung [kW]"", ""RF Auftrags-Nr."", ""Lieferant"", ""Ersteller"", ""Komponente"", ""Datum"", ""Status"", ""Spannung [V]"", ""Frequen" & _
"z [Hz]""})," & Chr(13) & "" & Chr(10) & "    #""Entfernte Spalten"" = Table. _
RemoveColumns(#""Erweiterte Benutzerdefiniert"",{""Content"", ""Name"", ""Extension"", ""Date  _
accessed"", ""Date modified"", ""Date created"", ""Attributes"", ""Folder Path"", ""Inhalt.Name"", ""Inhalt.Data"", ""Inhalt.Item"", ""Inhalt.Kind"", ""Inhalt.Hidden""})," & Chr(13) & "" & Chr(10) & "    #""Gefilterte Zeilen"" = Table.SelectRows(#""Entfe" & _
"rnte Spalten"", each [Ortskennzeichen]  null and [Ortskennzeichen]  """")," & Chr(  _
_
13) & "" & Chr(10) & "    #""Geänderter Typ"" = Table.TransformColumnTypes(#""Gefilterte Zeilen" _
",{{""Wirkleistung [kW]"", Int64.Type}, {""Scheinleistung [kVA]"", Int64.Type}, {""Datum"", type date}})
in
#"Geänderter Typ" 
Bis zu diesem Punkt scheint er zu kommen und die Quelle verwendet er auch entsprechend der Variable,
doch nun soll ich irgendwo ein Komma hinzufügen..
Anzeige
AW: VBA Quellenänderung
07.04.2020 10:44:13
ChrisL
Hi
Das fehlende Komma kann ich dir auf die Schnelle auch nicht suchen.
Du müsstest den Textstring mal ausgeben und mit dem Originaltext vergleichen. Z.B. Druck ins Direktfenster...
debug.print "Textstring"
Oder man kürzt den Textstring zeilenweise und testet immer wieder.
cu
Chris
Anzeige
AW: VBA Quellenänderung
07.04.2020 14:54:14
Julien
Habs gelöst bekommen. Nachdem ich im erweiterten Editor des PowerQuery-Tools mal genauer hingeschaut habe, war das einlesen der Quelle wohl das Problem. Gelöst habe ich es wie folgt:
Pfad = Chr(34) & strPfad & Chr(34)
If Not strPfad = "" Then
ActiveWorkbook.Queries.Add Name:="E_Daten_Sammelbecken", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Quelle = Folder.Files(" & Pfad & "),
Vielen Dank für die Hilfe!
Anzeige
String im String Beispiele
07.04.2020 16:48:31
ChrisL
Hi Julien
Danke für die Rückmeldung und Lösung (die du hauptsächlich selber erarbeitet hast).
Nicht dass es jetzt noch relevant wäre, aber hier ein paar Beispiele fürs allgemeine Verständnis.
Resultat:
Ein Test String
Dim x As String
x = "Ein Test String"
MsgBox x
Resultat:
Ein "Test" String
Dim x As String
x = "Ein ""Test"" String"
MsgBox x
Resultat:
Ein Test String
Dim x As String, y As String
y = "Test"
x = "Ein " & y & " String"
MsgBox x
Resultat:
Ein "Test" String
Dim x As String, y As String
y = "Test"
x = "Ein """ & y & """ String"
MsgBox x
Resultat:
Ein ""Test"" String
Dim x As String, y As String
y = "Test"
x = "Ein """"" & y & """"" String"
MsgBox x

N.b. ich hatte ursprünglich angenommen, dass du ein Resultat mit zwei Anführungszeichen brauchst. Daher mein Vorschlag mit 5 Gänsefüssen.
cu
Chris
Anzeige
;
Anzeige

Infobox / Tutorial

VBA Quellenänderung in PowerQuery


Schritt-für-Schritt-Anleitung

  1. Makro erstellen: Öffne den VBA-Editor in Excel (Alt + F11) und erstelle ein neues Modul.
  2. Variablen definieren: Lege eine Variable für den Pfad deiner Quelldateien an:
    Dim Pfad As String
    Pfad = "C:\User\Desktop\Beispiel"
  3. PowerQuery hinzufügen: Verwende ActiveWorkbook.Queries.Add um eine neue Abfrage zu erstellen:
    ActiveWorkbook.Queries.Add Name:="E_Daten_Sammelbecken", Formula:= _
    "let" & Chr(13) & " Quelle = Folder.Files(""" & Pfad & """),"
  4. Daten verarbeiten: Füge deine Transformationen hinzu, um die Daten zu bearbeiten, z.B.:
    "    #""Hinzugefügte benutzerdefinierte Spalte"" = Table.AddColumn(Quelle, ""Inhalt"", each Excel.Workbook([Content]))," & Chr(13)
  5. Abfrage speichern: Nutze die QueryTable um die Daten in dein Arbeitsblatt zu laden:
    Sheets.Add After:=ActiveSheet
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
    "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=E_Daten_Sammelbecken;Extended Properties=""" _
    , Destination:=Range("$A$1")).QueryTable
  6. Makro ausführen: Schließe den VBA-Editor und führe dein Makro aus.

Häufige Fehler und Lösungen

  • Laufzeitfehler 1004: Wenn du den Fehler [Expression.Error] Der Import "Pfad" entspricht keinem Export erhältst, stelle sicher, dass du den Pfad korrekt in Anführungszeichen setzt:
    Quelle = Folder.Files(""" & Pfad & """)
  • Syntaxfehler: Wenn du einen Syntaxfehler bekommst, überprüfe die Anzahl der Anführungszeichen. Es sollten immer vier Anführungszeichen für einen Pfad verwendet werden.
  • Spalte nicht gefunden: Bei der Fehlermeldung expression.error die spalte der tabelle wurde nicht gefunden, überprüfe die Namen in deiner Table.ExpandTableColumn Funktion und vergleiche sie mit den Spalten in deiner Quelldatei.

Alternative Methoden

Wenn du Schwierigkeiten mit ActiveWorkbook.Queries.Add hast, kannst du auch die PowerQuery-Oberfläche nutzen:

  1. Daten abrufen: Gehe zu Daten > Abfragen und Verbindungen > Abfrage erstellen.
  2. Ordner auswählen: Wähle "Aus Ordner" und gib den gewünschten Pfad an.
  3. Transformationen anwenden: Verwende die PowerQuery-Oberfläche, um deine Daten zu transformieren.

Praktische Beispiele

Hier sind einige Beispiele für die Verwendung von Variablen in PowerQuery:

  • Einfache Verwendung:

    Dim strPfad As String
    strPfad = "C:\User\Desktop\Beispiel"
  • String im String:

    MsgBox "Pfad: """ & strPfad & """"

Diese Beispiele helfen dir, ein besseres Verständnis für den Umgang mit Strings in VBA zu bekommen.


Tipps für Profis

  • Debugging: Verwende Debug.Print um den Textstring deiner Abfrage im Direktfenster auszugeben. So kannst du schnell Fehler finden.
  • Modularität: Teile komplexe Abfragen in kleinere Funktionen auf, um die Wartbarkeit zu erhöhen.
  • Fehlermeldungen verstehen: Lerne, die häufigsten Fehlermeldungen in VBA und PowerQuery zu deuten, um schneller Lösungen zu finden.

FAQ: Häufige Fragen

1. Wie kann ich den Pfad dynamisch setzen? Verwende eine Eingabeaufforderung oder eine Zelle in deinem Arbeitsblatt, um den Pfad zu setzen.

2. Was mache ich, wenn meine Abfrage nicht aktualisiert wird? Stelle sicher, dass das Makro beim Öffnen der Datei oder manuell aktualisiert wird.

3. Wie kann ich die Abfrage anpassen? Du kannst die ActiveWorkbook.Queries-Eigenschaft verwenden, um bestehende Abfragen zu ändern.

4. Was tun, wenn ich eine Fehlermeldung beim Laden der Abfrage erhalte? Überprüfe die Schreibweise und Struktur deiner Abfrage, insbesondere bei benutzerdefinierten Spalten und Datentypen.

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