VBA代码打开许多word表单并将数据导入Excel

VBA代码打开许多word表单并将数据导入Excel,excel,ms-word,vba,Excel,Ms Word,Vba,我正在尝试在Excel中编写VBA,以循环浏览许多Word文档(最多1500个),并将每个文档的表单字段数据提取到同一电子表格中的单独一行中。不幸的是,时间紧迫,我的VBA知识严重缺乏 我从其他尝试做类似事情的人那里收集了我能做的,然后创建了下面的弗兰肯斯坦式模块。我不确定如何解决我现在遇到的错误,甚至不确定我是否会正确处理。当我执行下面的代码时,我得到“未设置对象变量或带块变量(错误91)”。似乎每个循环都会阻塞。我假设有一个变量定义或赋值是不正确的 我想把它写成excelvba,以确保Wor

我正在尝试在Excel中编写VBA,以循环浏览许多Word文档(最多1500个),并将每个文档的表单字段数据提取到同一电子表格中的单独一行中。不幸的是,时间紧迫,我的VBA知识严重缺乏

我从其他尝试做类似事情的人那里收集了我能做的,然后创建了下面的弗兰肯斯坦式模块。我不确定如何解决我现在遇到的错误,甚至不确定我是否会正确处理。当我执行下面的代码时,我得到“未设置对象变量或带块变量(错误91)”。似乎每个循环都会阻塞。我假设有一个变量定义或赋值是不正确的

我想把它写成excelvba,以确保Word表单可以在不久的将来分发给我的用户,同时让这个VBA模块正常工作。这些表格需要在本周寄出,他们会马上给我。在过去的几年里,这个部门的工作人员做了大量的数据输入,将表单数据导入Excel,希望今年能避免这种情况

我还考虑将这些表单保存为仅限数据的分隔文本文件,但这需要打开每个Word文档,保存为分隔文本,将文件连接在一起,然后在Word中打开。这个过程非常简单,但我不想打开1500个Word文档将它们保存为分隔文本。剩下的就容易了

我相信我还需要加强错误处理。当我运行另一个只处理一个文件的宏时,如果我在电子表格中有列标题,并且单词doc保持打开状态,则该宏将失败。。但现在这是次要问题

提前感谢您提供的任何帮助

 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
子多文件加载()
'记住:此代码需要引用Word对象模型
Dim wdApp作为新单词。应用程序
将wdDoc设置为Word.Document
作为字符串的Dim fName
尺寸i为长,Rw为长,f为变型
暗文件
将路径设置为字符串
ChDir ActiveWorkbook.Path
Path=ActiveWorkbook.Path&“\”
file=Dir(“C:\temp\test\*.docx”)
文件“”时执行此操作
wdApp.Documents.Open文件名:=路径和文件
Rw=单元格(Rows.Count,1)。结束(xlUp)。行+2
单元(Rw,1)=单元(Rw-1,1)+1
i=1
对于wdDoc.FormFields中的每个f
i=i+1
出错时继续下一步
单元格(Rw,i)=f.结果
下一个
wdApp.ActiveDocument.Close
file=Dir()
环
wdApp.ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
wdApp,退出
设置wdApp=Nothing
出口:
端接头

我想出来了。仍然需要做更多的清理和修复其他问题,但这段代码符合我的目的。希望其他人也能找到它的用处

 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
子多文件加载()
'记住:此代码需要引用Word对象模型
Dim wdApp作为新单词。应用程序
将wdDoc设置为Word.Document
作为字符串的Dim fName
尺寸i为长,Rw为长,f为变体“Word.FormField”
暗文件
将路径设置为字符串
ChDir ActiveWorkbook.Path
Path=ActiveWorkbook.Path&“\”
file=Dir(“C:\temp\test\*.docx”)
文件“”时执行此操作
wdApp.Documents.Open文件名:=路径和文件
设置wdDoc=wdApp.Documents.Open(路径和文件)
Rw=单元格(Rows.Count,1)。结束(xlUp)。行+1
单元(Rw,1)=单元(Rw-1,1)+1
i=1
对于wdDoc.FormFields中的每个f
i=i+1
出错时继续下一步
单元格(Rw,i)=f.结果
下一个
wdApp.ActiveDocument.Close
file=Dir()
环
wdApp.ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
wdApp,退出
设置wdApp=Nothing
出口:
wdApp.ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
wdApp,退出
设置wdApp=Nothing
端接头