Excel VBA打开Word文档时wdoc变量返回Nothing问题求助
错误原因
- 路径传参错误:你代码中
wapp.Documents.Open的参数写法错误,oFile是FSO的文件对象,不能直接和路径字符串拼接,应该直接使用oFile.Path获取文件的完整绝对路径 - 实例创建逻辑不合理:Word应用实例的捕获、创建逻辑放在循环内部,每次遍历文件都会重复执行,多余且容易触发COM对象异常
- 未过滤文件类型:如果目标文件夹下存在非Word格式文件、Word临时文件(~$开头的隐藏缓存文件),强行调用Open方法会失败,导致wdoc赋值为空
- 缺少错误处理:遇到文件被占用、无访问权限等场景时,没有容错逻辑也会导致赋值失败
修正后代码
Sub readWordDocsToExcel() Dim oFSO As Object, oFolder As Object, oFile As Object Dim i As Integer Dim sFilePath As String Dim wapp As Word.Application Dim wdoc As Word.Document ' 用户配置区 sFilePath = "C:\Users\filesToRead\" ' 初始化FSO和Word实例 Set oFSO = CreateObject("Scripting.FileSystemObject") Set oFolder = oFSO.getfolder(sFilePath) On Error Resume Next Set wapp = GetObject(, "Word.Application") If Err.Number <> 0 Then Set wapp = CreateObject("Word.Application") End If On Error GoTo 0 wapp.Visible = False ' 不需要可见可以设为False提升运行速度 i = 1 For Each oFile In oFolder.Files ' 只处理docx/doc格式的正常Word文件,过滤临时文件 If (LCase(oFSO.GetExtensionName(oFile.Path)) = "docx" Or LCase(oFSO.GetExtensionName(oFile.Path)) = "doc") _ And Left(oFile.Name, 2) <> "~$" Then ' 打开文档 Set wdoc = Nothing On Error Resume Next Set wdoc = wapp.Documents.Open(oFile.Path) On Error GoTo 0 If Not wdoc Is Nothing Then ' 写入Excel,这里可按需修改写入位置 Sheet1.Cells(i, 1).Value = wdoc.Content.Text ' 可选:写入文件名到相邻列 Sheet1.Cells(i, 2).Value = oFile.Name ' 关闭文档不保存 wdoc.Close SaveChanges:=False i = i + 1 End If End If Next oFile ' 退出Word释放对象,避免残留进程 wapp.Quit SaveChanges:=False Set wdoc = Nothing Set wapp = Nothing Set oFile = Nothing Set oFolder = Nothing Set oFSO = Nothing End Sub
注意事项
- 如果运行提示用户类型未定义,可在VBA编辑器依次点击「工具-引用」,勾选对应版本的
Microsoft Word xx.x Object Library即可;也可以将Dim wapp As Word.Application、Dim wdoc As Word.Document改为Dim wapp As Object、Dim wdoc As Object使用后期绑定,无需额外引用 - 如果不需要读取doc格式文件,可删掉对应的判断条件提升运行效率
- 遇到加密、损坏的Word文件,代码会自动跳过不会中断运行
内容的提问来源于stack exchange,提问作者Richard Strott
相关产品推荐
相关产品推荐

