在Outlook邮件中的文本框

3
以下是两组 VBA 代码,用于删除文本框。第一组适用于 MS Excel,第二组适用于 MS Word。两者之间唯一的区别在于“Active”后的第三行。
我正在尝试在新打开的电子邮件中以 MS Outlook 中复制此操作,但缺乏正确的代码术语知识...是否有人知道答案?...谢谢。
Sub RemoveTextBox()
    Dim shp As Shape
    For Each shp In ActiveSheet.Shapes
        If shp.Type = msoTextBox Then shp.Delete
    Next shp
End Sub

Sub RemoveTextBox()
    Dim shp As Shape
    For Each shp In ActiveDocument.Shapes
        If shp.Type = msoTextBox Then shp.Delete
    Next shp
End Sub

据我所知,这是不可能的,因为Outlook电子邮件正文是HTML文档(但由Word的布局引擎呈现),它不公开任何DOM或添加交互式控件(ActiveX COM或其他方式)的方法。 - Dai
1个回答

2

对于Outlook,它将看起来像以下示例:

Option Explicit
Public Sub Example()
    Dim Inspector As Outlook.Inspector
    Dim wdDoc As Word.Document
    Dim Shp As Word.Shape

    Set Inspector = Application.ActiveInspector()
    Set wdDoc = Inspector.WordEditor

    For Each Shp In wdDoc.Shapes

        Debug.Print Shp.Type 'msoTextBox = 17 - Print on Immediate Window
        If Shp.Type = msoTextBox Then Shp.Delete

    Next

End Sub

使用 Application.ActiveInspector 方法(Outlook)Inspector.WordEditor 属性(Outlook) 来处理开放的邮件。

Inspector.WordEditor 属性(Outlook) 返回正在显示的邮件的 Microsoft Word 文档对象模型。只读,当 IsWordMail 方法返回 True 并且 EditorType 属性为 olEditorWord 时,WordEditor 属性才有效。返回的 WordDocument 对象提供了访问大部分 Word 对象模型的功能,但以下成员除外:


Application.ActiveInspector 方法(Outlook) 返回桌面上最顶层的 Inspector 对象。


记得增加对 Word xx 对象库的引用


1. 从“工具”菜单中选择“引用”以显示“引用”对话框。

2. “引用”对话框显示了所有已向操作系统注册的对象库。在列表中滚动以查找要引用其对象库的应用程序。如果该应用程序未列出,您可以使用“浏览”按钮来搜索对象库(.olb 和 .tlb)或可执行文件(.exe 和 .dll 在 Windows 上)。选中复选框的引用用于项目;未选中的则未被使用,但可以添加。


谢谢您的回复...我有点困惑,您说这是不可能的,但是您提供了代码。您是说不能像在Excel和Word中那样工作,而您的代码可以在Outlook中工作吗?如果这是正确的理解,那么也许您可以提供更多的帮助......当我运行代码时,它在第一个wdDoc处出错。 - DennisTM
@DennisTM,我不是说那句话的人 - 是别人,请再看一下评论 - 我从未见过有人在Outlook上这样做,所以我为您编写了一个使用ms-word对象库的代码,并且它可以工作 - 我永远不会发布未经测试的代码 - 我正在使用Outlook 2010。 - 0m3r
1
哇,你真是“巫师”啊……引用Word 14.0对象库就解决了问题,从今天起我变聪明了。太感激了,我本来已经准备放弃并认为这是不可能完成的……非常感谢! - DennisTM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接