将Word批注导出到Excel时出现“_Global对象的ThisWorkbook方法调用失败”错误
解决VBA导出Word批注到Excel时的“ThisWorkbook方法失败”错误
看起来你遇到的这个错误核心原因很明确——你大概率把代码放错了VBA环境!
错误根源
ThisWorkbook是Excel VBA专属的对象,用来指代当前运行代码的Excel工作簿。如果你的代码是在Word的VBA编辑器里运行的,Word的全局对象里根本没有ThisWorkbook这个方法,自然会抛出Method 'ThisWorkbook' of object '_Global' failed的错误。
分步解决方案
把代码移到Excel的VBA编辑器中
打开你要用来存放批注的Excel文件,按下Alt+F11打开Excel的VBA编辑器,右键点击左侧的工作簿名称,选择「插入」->「模块」,然后把你的代码粘贴到这个新模块里。确认Word对象库引用
在Excel的VBA编辑器中,点击顶部菜单的「工具」->「引用」,在弹出的对话框里找到并勾选Microsoft Word xx.x Object Library(xx.x是你的Office版本号,比如Office 2019是v16.0),点击确定。补全并修正代码(你的代码有截断)
你提供的代码不完整,我帮你补全了完整的可运行版本,同时确保ThisWorkbook的使用是正确的:Option Explicit Public Sub FindWordComments() 'Requires reference to Microsoft Word Object Library Dim myWord As Word.Application Dim myDoc As Word.Document Dim thisComment As Word.Comment Dim fDialog As Office.FileDialog Dim varFile As Variant Dim destSheet As Worksheet Dim rowToUse As Integer Dim colToUse As Long ' 设置文件对话框选择目标Word文档 Set fDialog = Application.FileDialog(msoFileDialogFilePicker) With fDialog .Filters.Clear .Filters.Add "Word Documents", "*.docx;*.doc" .AllowMultiSelect = False If .Show <> -1 Then Exit Sub ' 用户取消选择则退出 varFile = .SelectedItems(1) End With ' 初始化Word应用(后台运行,不显示界面) Set myWord = New Word.Application myWord.Visible = False ' 打开选中的Word文档 Set myDoc = myWord.Documents.Open(varFile) ' 指定Excel中的目标工作表(这里用当前工作簿的第一个工作表) Set destSheet = ThisWorkbook.Sheets(1) rowToUse = 2 ' 从第二行开始写入数据,第一行放表头 colToUse = 1 ' 写入表头 destSheet.Cells(1, colToUse).Value = "批注内容" destSheet.Cells(1, colToUse + 1).Value = "批注关联文本" ' 遍历所有批注并写入Excel For Each thisComment In myDoc.Comments destSheet.Cells(rowToUse, colToUse).Value = thisComment.Range.Text ' 批注对应的原文内容(批注标记覆盖的文本) destSheet.Cells(rowToUse, colToUse + 1).Value = thisComment.Scope.Text rowToUse = rowToUse + 1 Next thisComment ' 清理资源,关闭Word myDoc.Close SaveChanges:=False myWord.Quit Set myDoc = Nothing Set myWord = Nothing Set fDialog = Nothing Set destSheet = Nothing MsgBox "批注导出完成!", vbInformation End Sub调整宏安全设置(如果需要)
如果运行宏时被阻止,打开Excel的「文件」->「选项」->「信任中心」->「信任中心设置」->「宏设置」,选择「启用所有宏」(仅在你信任这段代码的情况下),或者选择「启用签署的宏」并给代码签名。
额外提示
- 运行代码前,确保目标Excel文件已经保存,避免意外丢失数据。
- 如果需要把批注导出到指定工作表,把
ThisWorkbook.Sheets(1)改成ThisWorkbook.Sheets("你的工作表名称")即可。
内容的提问来源于stack exchange,提问作者Ignacio Cetrangolo
相关产品推荐
相关产品推荐

