Позднее связывание объекта в VBA - PullRequest
1 голос
/ 03 декабря 2009

Я получаю «ошибку времени выполнения 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

Ответы [ 2 ]

4 голосов
/ 03 декабря 2009

Денис

если вы запускаете это из 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 Project не является доверенным», который разрешается с помощью параметров безопасности макроса, http://support.microsoft.com/kb/282830.

Надеюсь, это ответит на ваш вопрос.

0 голосов
/ 03 декабря 2009

Откуда вы взяли этот прогид (ActiveDocument.VBProject)? Обычно progid имеют форму AppName.ObjectName, как в Excel.Sheet или Word.Document. IIRC, VB6 не поддерживает OLE Automation; скорее он поддерживает создание серверов и клиентов автоматизации OLE.

Обновление:

Хорошо, я вижу, что происходит сейчас. ActiveDocument.VBProject не является допустимым progid. ActiveDocument является свойством объекта Word.Application, у которого есть progid (удивительно!) «Word.Application».

Итак, вы хотите, чтобы Мерингрос ответил.

...