VBAをExcelに書き込んで多数のWord文書(最大1,500以上)をループし、各文書のフォームフィールドデータを別々の行に抽出しようとしています同じスプレッドシートに残念ながら、時間枠は厳しいものであり、VBAの知識は真剣に欠けています。多くのワードフォームを開いてデータをExcelにインポートするVBAコード
似たようなことをしようとした他の人たちから私ができることを集めた後、私は下のFrankenstein-esqueモジュールを作成しました。私はエラーを解決する方法がわからない、私は今得ているし、肯定的でもない私はそれを正しい方法で行っている。以下のコードを実行すると、 "Object variableまたはWithブロック変数が設定されていません(エラー91)"というメッセージが表示されます。それはFor Eachループで窒息しているようです。変数の定義や割り当てが間違っていると思います。
これをExcel VBAとして記述して、このVBAモジュールが正しく機能するようになる間に近いうちにWordフォームをユーザーに配布できるようにしたかったのです。これらの書類は今週出される必要があり、すぐに私に戻ってくるでしょう。過去数年間、この部門のスタッフは、フォームデータをExcelに移植するための大量データ入力を行っていました。今年はこれを避けるためです。
また、これらのフォームをデータ区切りのテキストファイルとして保存することも考えましたが、各Word文書を開き、区切りテキストとして保存し、ファイルを連結してWordで開きます。かなりシンプルなプロセスですが、1,500ワードのドキュメントを区切りテキストとして保存することは望ましくありません。残りは簡単でしょう。
私もエラー処理を強化する必要があると思います。 1つのファイルだけを扱う別のマクロを実行すると、スプレッドシートに列ヘッダーがあり、Wordのドキュメントが開いたままになってもエラーになります。
お手数ですがお寄せいただきありがとうございます。
Sub MultFileLoad()
'Remember: this code requires a reference to the Word object model
Dim wdApp As New Word.Application
Dim wdDoc As Word.Document
Dim fName As String
Dim i As Long, Rw As Long, f As Variant
Dim file
Dim Path As String
ChDir ActiveWorkbook.Path
Path = ActiveWorkbook.Path & "\"
file = Dir("C:\temp\test\*.docx")
Do While file <> ""
wdApp.Documents.Open Filename:=Path & file
Rw = Cells(Rows.Count, 1).End(xlUp).Row + 2
Cells(Rw, 1) = Cells(Rw - 1, 1) + 1
i = 1
For Each f In wdDoc.FormFields
i = i + 1
On Error Resume Next
Cells(Rw, i) = f.Result
Next
wdApp.ActiveDocument.Close
file = Dir()
Loop
wdApp.ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
wdApp.Quit
Set wdApp = Nothing
Exits:
End Sub