Excel VBA 宏后期绑定

Posted

技术标签:

【中文标题】Excel VBA 宏后期绑定【英文标题】:Excel VBA macro late binding 【发布时间】:2019-03-09 13:03:39 【问题描述】:

我在 Excel 文件中嵌入了 Word 文档。我使用下面的宏将单元格值从 Excel 复制到嵌入的 Word 文档书签。宏在 Excel 2016 中工作正常。问题是我需要在几个 Excel 版本的宏中使用它。当我尝试在 Excel 2010 中打开 XLS 文档并运行宏时,我收到以下错误:“在隐藏模块 1 中编译错误。此错误通常发生在代码与版本不兼容时...”我想我必须翻译我的代码使用后期绑定,因此它不使用 VBA 项目引用。请帮忙!

Sub update_bookmark()

Dim oRng As Word.Range

 Set objWordTemplate = Sheets("Form1").OLEObjects("Object 1")
 objWordTemplate.Activate
 objWordTemplate.Object.Application.Visible = True
 Worksheets("source_sheet").Activate

 Set oRng = ActiveDocument.Bookmarks("name").Range
 oRng.Text = Cells(Application.ActiveCell.Row, 2)
 ActiveDocument.Bookmarks.Add "name", oRng

 End

End Sub

【问题讨论】:

文件是.XLS 还是.XLSX?两者完全不同。 文件扩展名为.XLS 【参考方案1】:

当我尝试在 Excel 2010 中打开 XLS 文档并运行宏时,我收到以下错误:“隐藏模块 1 中的编译错误。

我无法复制,但我猜这是因为在原始文件中有 xlsx 的引用 - Microsoft Office 16 Object Library 要查看,请检查 VBEditor>Tools>References。

后期绑定如:

Dim wdObject As Object 
Set wdObject = CreateObject("Word.Application")

Dim orange as Object
set orange = ActiveDocument.Bookmarks("name").Range

可能是一个可行的解决方案。

【讨论】:

是的,Excel 2010 中的引用中缺少 Microsoft Word 16.0 对象库。它导致了错误,但我不知道如何在我的代码中使用后期绑定 @user3189644 - 我想将对象设置为ActiveDocument.Bookmarks("name").Range 会很好(取自问题中的代码)。【参考方案2】:

取消选中 Word 参考并像这样更新您的代码:

Sub update_bookmark()

Dim oRng As Object
Dim objWordTemplate as Object
 Set objWordTemplate = Sheets("Form1").OLEObjects("Object 1")
 objWordTemplate.Activate
 objWordTemplate.Object.Application.Visible = True
 Worksheets("source_sheet").Activate

 Set oRng = objWordTemplate.Object.Application.ActiveDocument.Bookmarks("name").Range
 oRng.Text = Cells(Application.ActiveCell.Row, 2)
 objWordTemplate.Object.Application.ActiveDocument.Bookmarks.Add "name", oRng

End Sub

【讨论】:

以上是关于Excel VBA 宏后期绑定的主要内容,如果未能解决你的问题,请参考以下文章

如何用宏给EXCEL文件加密码

Excel VBA 使用 Telegram bot api 发送图像

无法在 Excel 2007 VBA 中使用 Option Strict Off 进行后期绑定

Excel VBA后期绑定Microsoft DAO 3.6对象库

VBA调用宏的方式总结大全

VBA调用宏的方式总结大全