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

Forumthread: PDF importieren mit variablem Bezug

PDF importieren mit variablem Bezug
20.08.2021 16:05:59
Lukas
Hallo,
ich möchte Daten aus einem PDF in Excel importieren, das klappt auch soweit. Allerdings wird hier im Code (Großteil über den recorder) direkt der Dateiname verwendet:
ActiveWorkbook.Queries.Add Name:="Page001", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Quelle = Pdf.Tables(File.Contents(""C:\Downloads\9c43638c-ae8a-4a63-9864-bf243c26528a.pdf""), [Implementation=""1.3""])," & Chr(13) & "" & Chr(10) & " Page1 = Quelle{[Id=""Page001""]}[Data]," & Chr(13) & "" & Chr(10) & " #""Geänderter Typ"" = Table.TransformColumnTypes(Page1,{{""Column1"", type text}, {""Column2"", type text}, {""Column3"", type text}, {""Column4"", type text}})" & Chr(13) & "" & _
"" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Geänderter Typ"""
ActiveWorkbook.Worksheets.Add
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""Page001"";Extended Properties=""""" _
, Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [Page001]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "Page001"
.Refresh BackgroundQuery:=False
End With
Nun ändert sich aber immer der Dateiname und auch der Pfad. Daher möchte ich, dass die Nutzer die PDF auswählen, speichere die Angabe als Variable und möchte diese öffnen. Mit der Variable result liefert er mir auch den Pfad C:\Downloads\9c43638c-ae8a-4a63-9864-bf243c26528a.pdf nur leider werden die Daten nicht importiert mit dem Laufzeitfehler '1004': "[DataFormat.Error] Der angegebene Dateipfad muss ein gültiger absoluter Pfad sein." Sieht jemand meinen Fehler oder hat eine andere Idee, wie sich das umsetzen lässt?
' Datei auswählen
Dim wb As Workbook, result As Variant
result = Application.GetOpenFilename(FileFilter:="PDF-Dateien(*.pdf),*.pdf", Title:="Bitte Datei auswählen.")
' Daten importieren
ActiveWorkbook.Queries.Add Name:="Page001", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Quelle = Pdf.Tables(File.Contents("" & result & ""), [Implementation=""1.3""])," & Chr(13) & "" & Chr(10) & " Page1 = Quelle{[Id=""Page001""]}[Data]," & Chr(13) & "" & Chr(10) & " #""Geänderter Typ"" = Table.TransformColumnTypes(Page1,{{""Column1"", type text}, {""Column2"", type text}, {""Column3"", type text}, {""Column4"", type text}})" & Chr(13) & "" & _
"" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Geänderter Typ"""
ActiveWorkbook.Worksheets.Add
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""Page001"";Extended Properties=""""" _
, Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [Page001]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "Page001"
.Refresh BackgroundQuery:=False
End With
Vielen Dank vorab und liebe Grüße
Lukas
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: PDF importieren mit variablem Bezug
20.08.2021 17:08:15
ChrisL
Hi Lukas
Aus dem holen Bauch heraus würde ich vermuten, dass es 3 Gänsefüsse braucht.
...File.Contents(""" & result & """)...
cu
Chris
AW: PDF importieren mit variablem Bezug
20.08.2021 17:22:41
Lukas
Hallo Chris,
super hat geklappt, danke! Es sind immer solche Kleinigkeiten :D
Schönes Wochenende
Lukas
Anzeige
;

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

PDF in Excel importieren mit variablem Bezug


Schritt-für-Schritt-Anleitung

Um Daten aus einer PDF-Datei in Excel zu importieren, besonders wenn der Dateiname variabel ist, kannst du die folgende VBA-Anleitung verwenden:

  1. Öffne Excel und drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu starten.

  2. Füge ein neues Modul hinzu:

    • Klicke im Menü auf Einfügen und wähle Modul.
  3. Füge den folgenden Code ein:

    Sub ImportPDF()
       Dim wb As Workbook
       Dim result As Variant
    
       ' Datei auswählen
       result = Application.GetOpenFilename(FileFilter:="PDF-Dateien(*.pdf),*.pdf", Title:="Bitte Datei auswählen.")
    
       ' Prüfe, ob eine Datei ausgewählt wurde
       If result <> False Then
           ' Daten importieren
           ActiveWorkbook.Queries.Add Name:="Page001", Formula:= _
           "let" & Chr(13) & "" & Chr(10) & "    Quelle = Pdf.Tables(File.Contents(""" & result & """), [Implementation=""1.3"")," & Chr(13) & "" & Chr(10) & "    Page1 = Quelle{[Id=""Page001""]}[Data]," & Chr(13) & "" & Chr(10) & "    #""Geänderter Typ"" = Table.TransformColumnTypes(Page1,{{""Column1"", type text}, {""Column2"", type text}, {""Column3"", type text}, {""Column4"", type text}})" & Chr(13) & "" & _
           Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""Geänderter Typ"""
    
           ActiveWorkbook.Worksheets.Add
           With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
           "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""Page001"";Extended Properties=""""" _
           , Destination:=Range("$A$1")).QueryTable
               .CommandType = xlCmdSql
               .CommandText = Array("SELECT * FROM [Page001]")
               .RowNumbers = False
               .FillAdjacentFormulas = False
               .PreserveFormatting = True
               .RefreshOnFileOpen = False
               .BackgroundQuery = True
               .RefreshStyle = xlInsertDeleteCells
               .SavePassword = False
               .SaveData = True
               .AdjustColumnWidth = True
               .RefreshPeriod = 0
               .PreserveColumnInfo = True
               .ListObject.DisplayName = "Page001"
               .Refresh BackgroundQuery:=False
           End With
       End If
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Führe das Makro aus, indem du ALT + F8 drückst, das Makro ImportPDF auswählst und auf Ausführen klickst.


Häufige Fehler und Lösungen

  • Laufzeitfehler '1004':

    • Problem: Der angegebene Dateipfad ist nicht korrekt.
    • Lösung: Stelle sicher, dass du die drei Gänsefüßchen um den result-Pfad korrekt setzt. Der Code sollte so aussehen:
      Quelle = Pdf.Tables(File.Contents(""" & result & """), [Implementation="1.3"])
  • Import funktioniert nicht:

    • Problem: Möglicherweise ist die PDF-Datei nicht kompatibel oder die Struktur der PDF ist nicht lesbar.
    • Lösung: Überprüfe die PDF-Datei auf korrekte Formatierungen oder versuche eine andere Datei.

Alternative Methoden

Wenn du die Daten aus PDF in Excel importieren möchtest, ohne VBA zu verwenden, kannst du auch die folgenden Methoden ausprobieren:

  1. Power Query:

    • Gehe zu Daten > Neue Abfrage > Aus Datei > Aus PDF.
    • Wähle die PDF-Datei aus und folge dem Assistenten.
  2. Online-Tools:

    • Es gibt verschiedene Online-Dienste, die PDF in Excel umwandeln können, wie Smallpdf oder PDF2Excel.

Praktische Beispiele

  • Beispiel 1: Excel-Tabelle aus PDF importieren

    • Mit dem oben genannten VBA-Skript kannst du ganz einfach Daten von verschiedenen Seiten importieren, indem du den Namen der Seite änderst (z.B. Page002 für die zweite Seite).
  • Beispiel 2: Daten aus PDF exportieren

    • Wenn du die Daten nach dem Import bearbeitest, kannst du sie auch wieder als PDF speichern, um eine übersichtliche Dokumentation zu haben.

Tipps für Profis

  • Verwende activeworkbook.queries: Um mehrere Abfragen zu speichern und zu verwalten, verwende die ActiveWorkbook.Queries-Sammlung, um die Abfragen zu organisieren.

  • Erstelle dynamische Abfragen: Du kannst den Code erweitern, um verschiedene Seiten und Tabellen je nach PDF-Datei dynamisch zu importieren.

  • Optimierung durch Fehlerbehandlung: Integriere Fehlerbehandlungsroutinen in deinen VBA-Code, um unerwartete Probleme beim Importieren zu vermeiden.


FAQ: Häufige Fragen

1. Kann ich mehrere PDF-Dateien gleichzeitig importieren? Ja, du kannst den VBA-Code anpassen, um eine Schleife zu verwenden, die mehrere PDF-Dateien verarbeitet.

2. Welche Excel-Version wird benötigt? Die beschriebenen Methoden sind in Excel 2016 und neuer verfügbar, insbesondere die Power Query-Funktion.

3. Wo finde ich die importierten Daten in Excel? Die importierten Daten erscheinen in einem neuen Arbeitsblatt, beginnend ab der Zelle A1.

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