初心者のために、私はVBAの経験が限られています。私はWordテーブルのテーブル(またはテーブル)からデータを取り出すExcelマクロを持っています。私の問題は、私が何千ものWord文書のようなものを持っていることです。そのため、ユーザーが選択したフォルダ内のすべてのWord文書のデータをコピーするソリューションが役立ちます。複数のWord文書を開く
は、ここに私の現在のコードです:
Sub ImportWordTables()
'Imports cells from Word document Tables in multiple documents
Dim wdDoc As Object
Dim TableNo As Integer 'number of tables in Word doc
Dim iTable As Integer 'table number index
Dim iRow As Long 'row index in Excel
Dim iCol As Integer 'column index in Excel
Dim ix As Long
ix = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
LastRow = ix
wdFileName = Application.GetOpenFilename("Word files (*.doc*),*.doc*", MultiSelect = True, _
"Browse for files containing table to be imported")
If wdFileName = False Then Exit Sub '(user cancelled import file browser)
Set wdDoc = GetObject(wdFileName) 'open Word file
With wdDoc
TableNo = 1
If TableNo = 0 Then
MsgBox "This document contains no tables", _
vbExclamation, "Import Word Table"
End If
For iTable = 1 To TableNo
With .tables(iTable)
'copy cell contents from Word table cells to Excel cells in column A and B
Cells(ix + 1, "A") = WorksheetFunction.Clean(.Cell(1, 2))
Cells(ix + 1, "B") = WorksheetFunction.Clean(.Cell(2, 2))
Cells(ix + 1, "C") = WorksheetFunction.Clean(.Cell(3, 2))
Cells(ix + 1, "D") = WorksheetFunction.Clean(.Cell(4, 2))
Cells(ix + 1, "E") = WorksheetFunction.Clean(.Cell(5, 2))
Cells(ix + 1, "F") = WorksheetFunction.Clean(.Cell(6, 2))
Cells(ix + 1, "G") = WorksheetFunction.Clean(.Cell(6, 3))
Cells(ix + 1, "H") = WorksheetFunction.Clean(.Cell(7, 2))
Cells(ix + 1, "I") = WorksheetFunction.Clean(.Cell(8, 2))
Cells(ix + 1, "J") = WorksheetFunction.Clean(.Cell(9, 2))
Cells(ix + 1, "K") = WorksheetFunction.Clean(.Cell(10, 2))
Cells(ix + 1, "L") = WorksheetFunction.Clean(.Cell(13, 2))
End With
Next iTable
End With
Set wdDoc = Nothing
End Sub
私はループを作成する必要があることを知っているが、私は仕事に同様の質問で見つかったループの例のいずれかを変更することができませんでした。
まず、このプロジェクトのお手伝いをしていただきありがとうございます。私はあなたが最高の解決策ではないことを意味するものを完全に理解しています。それは、私はコンパイルエラーが発生していると言っています:プライベート関数GetCellValue(ByRef pTableとしてWord.Table、ByVal pRow As Long)それが定義されていないと言うバリアント。私はそれを理解しようとしますが、もしあなたがオンラインであれば、まずはありがとう、もう一度、それを一番上に定義するだけですか? 編集:特定のエラーは、 "ユーザー定義の型が定義されていません" –
Wordおよびスクリプトライブラリへの参照設定に関するコードに入れたサブコメントをキャッチしていない可能性があります。それはメインのサブルーチンにありました。 Microsoft Word#。#Object LibraryとMicrosoft Scripting Runtimeライブラリへの参照を設定する必要があります。そのエラーを処理する必要があります。 – dscarr
うん。 。 。その関数はそのパラメータリスト内のWord.Tableオブジェクトを使用します。そのためには、Word Object Libraryへの参照が必要です。 – dscarr