VBA后期绑定删除Outlook签名

时间:2018-11-09 17:04:19

标签: vba outlook ms-word late-binding

我有一段代码由于早期绑定与后期绑定而导致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 :(得分:0)

后期绑定仅代表“在运行时已解决”。

声明As Word.Document时,就是在编译时解析类型,即早期绑定:您知道在键入.点时成员调用是后期绑定的,并且没有智能感知下拉菜单弹出。

声明对象As ObjectAs Variant,然后编译器将不知道在运行时之前要使用什么类型,因此您将有后期绑定。

在所有声明都已绑定之后,您可以删除对类型库的引用...但是在此之前,我热烈建议您确保在每个模块中都指定Option Explicit,因为任何常量或否则将不再定义该类型库中定义的枚举,并且在运行时不会神奇地解决该枚举-例如如果您在任何地方都使用olFolderInbox,则需要用自己的常量替换它,例如Const olFolderInbox = 6,否则,Outlook.olFolderInbox在没有引用Outlook类型库的情况下将无法解析,并且您将遇到编译错误。

没有Option Explicit,而不是编译错误,您将在运行时将olFolderInbox默默地“声明”为隐式即时Variant,其值为Empty,无论您在何处使用它,它都会默默转换为0,这可能会导致难以诊断的问题。