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

Mos*_*ess 4 clipboard microsoft-outlook-2007 vba

我的问题

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

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

并将其复制到剪贴板?

我正在使用 Microsoft Outlook 2007。


我已经尝试过的

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

难点是获取当前选中的文本

我尝试了以下命令:

  • Outlook.copy
  • Outlook.selection.copy
  • Outlook.activeexplorer.selection.item(1)。......
    有许多变化,但没有成功。

我发现一些消息来源指出无法通过 VBA 在 Outlook 中获取当前选定的文本,但我认为至少必须可以调用 Ctrl-C(复制)命令,然后使用剪贴板的内容。

我还偶然发现了与督察一些解决方案所描述的在这里,但我得到了一个错误信息。也许是因为我忘记引用“MS Word 对象库”——我会在星期一尝试。

Ƭᴇc*_*007 5

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

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

为了使以下代码在 Outlook 中工作,您需要向“Microsoft Word 对象库”添加一个引用(VBA 编辑器 -> 工具 -> 引用),并将一个引用添加到“Microsoft Forms 对象库”,以便我们可以实际复制文本系统剪贴板。

注意:对我来说,在Office 2013中,MS Forms对象不在列表中,所以我只是在VBA项目中添加了一个UserForm,它自动添加了引用,然后只是删除了表单。引用卡住了。

无论如何,我挖掘了许多来源,这里有一些代码我粘在一起,将突出显示的文本复制到剪贴板,并进行一些基本的错误检查(在 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
Run Code Online (Sandbox Code Playgroud)