我的问题
如何获得当前选定的文本在 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