VBA代码打开许多word表单并将数据导入Excel
我正在尝试在Excel中编写VBA,以循环浏览许多Word文档(最多1500个),并将每个文档的表单字段数据提取到同一电子表格中的单独一行中。不幸的是,时间紧迫,我的VBA知识严重缺乏 我从其他尝试做类似事情的人那里收集了我能做的,然后创建了下面的弗兰肯斯坦式模块。我不确定如何解决我现在遇到的错误,甚至不确定我是否会正确处理。当我执行下面的代码时,我得到“未设置对象变量或带块变量(错误91)”。似乎每个循环都会阻塞。我假设有一个变量定义或赋值是不正确的 我想把它写成excelvba,以确保Word表单可以在不久的将来分发给我的用户,同时让这个VBA模块正常工作。这些表格需要在本周寄出,他们会马上给我。在过去的几年里,这个部门的工作人员做了大量的数据输入,将表单数据导入Excel,希望今年能避免这种情况 我还考虑将这些表单保存为仅限数据的分隔文本文件,但这需要打开每个Word文档,保存为分隔文本,将文件连接在一起,然后在Word中打开。这个过程非常简单,但我不想打开1500个Word文档将它们保存为分隔文本。剩下的就容易了 我相信我还需要加强错误处理。当我运行另一个只处理一个文件的宏时,如果我在电子表格中有列标题,并且单词doc保持打开状态,则该宏将失败。。但现在这是次要问题 提前感谢您提供的任何帮助VBA代码打开许多word表单并将数据导入Excel,excel,ms-word,vba,Excel,Ms Word,Vba,我正在尝试在Excel中编写VBA,以循环浏览许多Word文档(最多1500个),并将每个文档的表单字段数据提取到同一电子表格中的单独一行中。不幸的是,时间紧迫,我的VBA知识严重缺乏 我从其他尝试做类似事情的人那里收集了我能做的,然后创建了下面的弗兰肯斯坦式模块。我不确定如何解决我现在遇到的错误,甚至不确定我是否会正确处理。当我执行下面的代码时,我得到“未设置对象变量或带块变量(错误91)”。似乎每个循环都会阻塞。我假设有一个变量定义或赋值是不正确的 我想把它写成excelvba,以确保Wor
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
端接头