Outlook VBA - 如何将当前选定的文本复制到剪贴板?

Outlook VBA - 如何将当前选定的文本复制到剪贴板?

我的问题

如何获得当前选定的文本在 Microsoft Outlook 2007 中

  • 在打开的消息窗口中
  • 或在预览窗格中当前选定的消息中

复制放入剪贴板吗?

我正在使用 Microsoft Outlook 2007。


我已经尝试过

我知道我可以使用 DataObjects 将文本放入剪贴板或从剪贴板获取文本。

困难在于获取当前选定的文本

我尝试了以下命令:

  • Outlook.副本
  • Outlook.选择.复制
  • Outlook.activeexplorer.selection.item(1)。......
    有很多变化,但都没有成功。

我发现一些资料表明无法通过 VBA 获取 Outlook 中当前选定的文本,但我认为至少可以调用 Ctrl-C(复制)命令,然后使用剪贴板的内容。

我还偶然发现了一些使用 Inspector 的解决方案,如下所述这里,但我收到了一条错误消息。可能是因为我忘了引用“MS Word 对象库”——我会在周一尝试一下。

答案1

由于 Outlook 使用 Word(如果已安装)作为其编辑器,因此获取它有点麻烦。:)

您必须引用 Word 应用程序,然后引用 Word 文档,然后引用选择。

为了使以下代码在 Outlook 中运行,您需要添加引用 (VBA 编辑器 -> 工具 -> 参考) 到“Microsoft Word 对象库”,还有一个到“Microsoft Forms 对象库”,这样我们就可以真正地将文本复制到系统剪贴板了。

笔记:对我来说,在 Office 2013 中,MS Forms 对象不在列表中,因此我只是将 UserForm 添加到 VBA 项目中,这会自动添加引用,然后删除该表单。引用保留了下来。

无论如何,我挖掘了许多来源,这里是我粘贴在一起的一些代码,可以把突出显示的文本复制到剪贴板,并进行一些基本的错误检查(在 Outlook 2013 中测试):

Public Sub CopyTextToClipBoard()

    Dim objItem As Object
    Dim objInsp As Outlook.Inspector

    Dim objWord As Word.Application
    Dim objDoc As Word.Document
    Dim objSel As Word.Selection
    On Error Resume Next

    ' Reference the current Outlook item
    Set objItem = Application.ActiveInspector.CurrentItem
    If Not objItem Is Nothing Then
        If objItem.Class = olMail Then
            Set objInsp = objItem.GetInspector
            If objInsp.EditorType = olEditorWord Then
                Set objDoc = objInsp.WordEditor
                Set objWord = objDoc.Application
                Set objSel = objWord.Selection

                On Error GoTo NotText
                With New MSForms.DataObject
                    .SetText objSel.Text
                    .PutInClipboard
                End With
                On Error Resume Next       

            End If
        End If
    End If

    Set objItem = Nothing
    Set objWord = Nothing
    Set objSel = Nothing
    Set objInsp = Nothing

NotText:
    If Err <> 0 Then
        MsgBox "Data on clipboard is not text."
    End If

End Sub

相关内容