自分用メモ3
Sub ImportPDFandRemoveQuery()
Dim wb As Workbook
Dim ws As Worksheet
Dim queryName As String
Dim pdfPath As String
Dim mCode As String
Dim fd As FileDialog
Set wb = ThisWorkbook
Set ws = wb.Sheets("Sheet1") ' 必要に応じてシート名を変更してください
queryName = "PDFQuery" ' クエリ名を適宜変更してください
' ファイルダイアログを表示してPDFファイルを選択
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Title = "Select PDF File"
.Filters.Add "PDF Files", "*.pdf", 1
.AllowMultiSelect = False
If .Show = -1 Then
pdfPath = .SelectedItems(1)
Else
MsgBox "No file selected. Exiting macro."
Exit Sub
End If
End With
' Power QueryのMコードを生成
mCode = _
"let" & vbCrLf & _
" Source = Pdf.Tables(File.Contents(""" & pdfPath & """), [Implementation=""1.3""])," & vbCrLf & _
" AllTables = Table.Combine(Table.TransformColumns(Source, {""Tables"", each Table.ExpandTableColumn(_, ""Table"") }))" & vbCrLf & _
"in" & vbCrLf & _
" AllTables"
' クエリを追加
On Error Resume Next
wb.Queries(queryName).Delete
On Error GoTo 0
wb.Queries.Add Name:=queryName, Formula:=mCode
' クエリをシートに読み込み
With ws.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=" & queryName & ";Extended Properties=""""" _
, Destination:=ws.Range("A1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [" & queryName & "]")
.BackgroundQuery = True
.Refresh BackgroundQuery:=False
End With
' テーブルを値としてコピー
ws.ListObjects(1).Range.Copy
ws.Cells(1, 1).PasteSpecial Paste:=xlPasteValues
' クエリを削除
On Error Resume Next
With wb.Queries(queryName)
.Delete
End With
On Error GoTo 0
' クエリ接続を削除
On Error Resume Next
wb.Connections(queryName).Delete
On Error GoTo 0
MsgBox "PDFからのテーブルのインポートが完了し、クエリが削除されました。"
End Sub
頂いたサポートは鶏のささみを買って猫と半分こします!