VBA Позднее связывание Удалить подпись Outlook - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть фрагмент кода, который вызывает проблемы переносимости между Office 2013 и 2016 из-за раннего или позднего связывания. Я пытаюсь получить этот набор как позднюю привязку, чтобы избежать необходимости снимать флажок библиотеки объектов Word, которая имеет более высокую версию в библиотеке ссылок. Я не уверен, как это сделать.

'Function to Delete Auto Signature
 Public Function DelSig(olMsgReplyAll)
'Delete Automatic Signature

Dim ObjDoc As Word.Document
Dim oBookmark As Word.Bookmark
On Error Resume Next
Set ObjDoc = olMsgReplyAll.GetInspector.WordEditor
Set oBookmark = ObjDoc.Bookmarks("_MailAutoSig")
If Not oBookmark Is Nothing Then
    oBookmark.Select
    ObjDoc.Windows(1).Selection.Delete
End If

DelSig = olMsgReplyAll
End Function

1 Ответ

0 голосов
/ 09 ноября 2018

Позднее связывание означает просто «разрешено во время выполнения».

Когда вы объявляете что-то As Word.Document, вы разрешаете типы во время компиляции, т.е. раннее связывание: вы знаете, что вызов члена связан с поздним связыванием, когда вы набираете точку ., и раскрывающийся список intellisense отсутствует.

Объявите объекты As Object или As Variant, и компилятор не будет знать, какие типы использовать до времени выполнения, и, таким образом, у вас будет позднее связывание.

Со всеми объявлениями с поздним связыванием вы можете затем удалить ссылку на библиотеку типов ... но прежде чем вы сделаете это, я настоятельно рекомендую вам убедиться, что Option Explicit указан в каждом модуле, потому что любая константа или перечисление определены в этой библиотеке типов больше не будет определяться и НЕ будет магически разрешаться во время выполнения - например, если вы используете olFolderInbox в любом месте, вам нужно заменить его на свою собственную константу, например, Const olFolderInbox = 6, иначе Outlook.olFolderInbox не будет разрешен без ссылки на библиотеку типов Outlook, и у вас будет ошибка компиляции.

Без Option Explicit, вместо ошибки компиляции, вы будете olFolderInbox тихо "объявлены" во время выполнения как неявное на лету Variant со значением Empty, что будет тихо конвертируйте в 0 везде, где вы его используете, что может привести к довольно трудным для диагностики проблемам.

...