ich habe mal eine Speziellere Frage wo ich nicht so genau weiß wie ich mit meinen VBA Code anfangen soll.
Problemstellung: Ich habe ein automatisiert erstelltes PDF, aus den ich einen Teil auslesen möchte und in VBA weiter verarbeiten möchte.
Zum PDF:
Es hat immer den Selben Aufbau, je nach Dateninhalt ist dieses Dokument mal länger oder kürzer, sprich meine auszulesende Information ist mal auf Seite 7 oder 8.
Das Gute, die PDF hat Kopfzeilen wo immer die gleiche Überschrift drinsteht.
Meine Ideen zur Lösung:
Mit diesen Code:
ActiveWorkbook.Queries.Add Name:= _
"test1 pdf", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Quelle = Pdf.Tables(File.Contents(""filePath""), [Implementation=""1.3""])," & Chr(13) & "" & Chr(10) & " #""Gefilterte Zeilen"" = Table.SelectRows(Quelle, each ([Name] = ""Table015 (Page 7)""))," & Chr(13) & "" & Chr(10) & " #""Erweiterte Data"" = Table.ExpandTableColumn(#""Gefilterte Zeilen"", ""Data"", {""Column1"", ""Column2"", ""Column3"", " & _
"""Column4"", ""Column5"", ""Column6"", ""Column7"", ""Column8"", ""Column9"", ""Column10"", ""Column11"", ""Column12"", ""Column13"", ""Column14"", ""Column15"", ""Column16""}, {""Data.Column1"", ""Data.Column2"", ""Data.Column3"", ""Data.Column4"", ""Data.Column5"", ""Data.Column6"", ""Data.Column7"", ""Data.Column8"", ""Data.Column9"", ""Data.Column10"", ""Data.Co" & _
"lumn11"", ""Data.Column12"", ""Data.Column13"", ""Data.Column14"", ""Data.Column15"", ""Data.Column16""})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Erweiterte Data"""
ActiveWorkbook.Worksheets.Add
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""test pdf"";Extended Propert" _
, "ies="""""), Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array( _
"SELECT * FROM [test pdf]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "test_pdf"
.Refresh BackgroundQuery:=False
End With
erhalte ich die gewünschten Informationen auf einen Tabellen Blatt. In diesen Fall lagen die gewünschten Informationen in der "Table015 auf Page 7"
Ich möchte jetzt versuchen diese Angabe zur Tabelle herauszufinden, um den obenstehenden Abfrage String zu automatisieren.
Sub ReadPDFIntoExcel()
Dim filePath As String
Dim AcroApp As Acrobat.CAcroApp
Dim AcroPDDoc As Acrobat.CAcroPDDoc
Dim AcroAVDoc As Acrobat.CAcroAVDoc
Dim PDDoc As Object
Dim jso As Object
Dim pageNum As Integer
Dim text As String
Dim i As Integer
Dim objIE As Object
Dim objShell As Object
' Pfad zur PDF-Datei auswählen
With Application.FileDialog(msoFileDialogFilePicker)
.Filters.Clear
.Filters.Add "PDF-Dateien", "*.pdf"
.AllowMultiSelect = False
If .Show = -1 Then
filePath = .SelectedItems(1)
Else
MsgBox "Keine Datei ausgewählt."
Exit Sub
End If
End With
' Acrobat-Anwendung initialisieren
Set AcroApp = CreateObject("AcroExch.App")
AcroApp.Hide
' PDF-Dokument öffnen
Set AcroAVDoc = CreateObject("AcroExch.AVDoc")
AcroAVDoc.Open filePath, ""
' Acrobat-JavaScript-Objekt erhalten
Set AcroPDDoc = AcroAVDoc.GetPDDoc
Set jso = AcroPDDoc.GetJSObject
' Anzahl der Seiten im PDF-Dokument erhalten
pageNum = AcroPDDoc.GetNumPages
' Excel-Arbeitsblatt erstellen
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets.Add
' PDF-kopfzeile durchsuchen
For i = 0 To pageNum - 1
text = jso.getpageNthWord(i, 0)
If text = "uberschrift" Then
'Blatt mit uberschrift gefunden
seite = i + 1
End If
Next i
If seite = "" Then
MsgBox "Keine Seite mit uberschrift gefunden"
End If
'hier muss das Wunder Rein ;)
' Ressourcen freigeben
AcroAVDoc.Close False
AcroApp.Exit
Set AcroPDDoc = Nothing
Set AcroAVDoc = Nothing
Set AcroApp = Nothing
MsgBox "PDF erfolgreich in Excel eingefügt."
End Sub
Mit diesen code bekomme ich die angesprochene Überschrift aus den PDF herausgefunden und die dazugehörige Seitenzahl, aber nicht die "Tabelle" von der externen Datenabfrage.
Es gibt doch bestimmt einen VBA weg, um über eine Datenabfrage die Überschrift zu finden und dann die nachfolgende Tabelle in Exel einzulesen.
Könnt Ihr mich hier etwas an die Hand nehmen und auf den richtigen Weg bringen.
Für mich ist die automatische "externe" Datenabfrage doch noch recht neu und unübersichtlich.
vielen Dank und Gruß
Matthias