2017-03-08 9 views
0

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 

答えて

0

私はそれを理解しました。さらにクリーンアップを行い、他の問題を修正する必要がありますが、このコードは私の目的のために機能します。うまくいけば、誰か他の人も同様にそれを使うだろう。

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 'Word.FormField 
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 

Set wdDoc = wdApp.Documents.Open(Path & file) 
Rw = Cells(Rows.Count, 1).End(xlUp).Row + 1 
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: 
wdApp.ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges 
wdApp.Quit 
Set wdApp = Nothing 

End Sub 
関連する問題