在VBA中后期绑定对象

时间:2009-12-02 22:16:06

标签: vba ms-word late-binding

我在尝试后期绑定到VBProject对象时遇到“运行时错误429”:

Dim vbProj As Object
Set vbProj = CreateObject("ActiveDocument.VBProject")

有什么根本我无法理解吗?

例如,您如何编写article 308340中的代码以使用后期绑定?:

 Sub CheckReference()

        Dim vbProj As VBProject  
        Set vbProj = ActiveDocument.VBProject

        For Each chkRef In vbProj.References

          If chkRef.IsBroken Then
             Debug.Print chkRef.Name
          End If

        Next

    End Sub

2 个答案:

答案 0 :(得分:4)

丹尼斯,

如果从Word中运行它,则不需要使用CreateObject()。

设置vbProj = ActiveDocument.VBProject将起作用。

如果从其他地方运行,则可能需要先创建Word对象并加载文档:

  Dim a As Object
  Dim vbProj As Object

  Set a = CreateObject("Word.Application")
  a.Documents.Open "C:\temp\test1.docx"
  MsgBox a.Documents.Count
  Set vbProj = a.ActiveDocument.VBProject

在这两种情况下,您都可能通过宏安全设置http://support.microsoft.com/kb/282830获得“对Visual Basic项目的编程访问不受信任”。

我希望这能回答你的问题。

答案 1 :(得分:0)

你是从哪里得到那个progid(ActiveDocument.VBProject)?通常progid的形式为AppName.ObjectName,如Excel.Sheet或Word.Document。 IIRC,VB6不支持OLE自身;相反,它支持创建 OLE自动化服务器和客户端。

更新

好的,我知道现在发生了什么。 ActiveDocument.VBProject不是有效的progid。 ActiveDocument是Word.Application对象的一个​​属性,它有一个progid(惊喜!)“Word.Application”。

所以你想要Meringros回答。