后期绑定在VBA对象(Late binding an Object in VBA)

2019-10-18 12:45发布

我收到“运行时错误429”在我企图在后期绑定到VBProject对象:

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

有一些基本的东西我不理解?

例如,你怎么会写在代码的文章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

Answer 1:

丹尼斯,

如果你是从内部运行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

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

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



Answer 2:

你从哪儿拿出那个进程id(ActiveDocument.VBProject)? 一般来说PROGID的是形式AppName.ObjectName的,如Excel.Sheet和Word.Document。 IIRC,VB6不支持OLE自动化本身; 相反,它支持创建 OLE自动化服务器和客户端。

更新:

好吧,我现在看到发生了什么事情。 ActiveDocument.VBProject不是有效的进程id。 是的ActiveDocument Word.Application对象,其中有一个ProgID的属性(惊喜!)“Word.Application”。

所以,你要Meringros答案。



文章来源: Late binding an Object in VBA