Outlook VBA 如何将邮件正文中选中的文本内容复制到变量中
Outlook VBA 读取邮件正文选中文本的实现方法
可以实现将用户在邮件正文中选中的文本存储到变量中,你写的基础代码思路方向正确,但需要适配Outlook的对象模型逻辑:Outlook 顶层的Selection对象默认指向邮件列表、导航栏的选中条目,无法直接读取正文内的文本选区,需要通过邮件绑定的Word编辑器接口读取内容。
前置条件
- Outlook 2010及以上版本默认使用Word作为邮件编辑器,无需额外配置即可使用以下代码
- 代码支持两种使用场景:独立窗口打开的阅读/撰写邮件、主界面的预览窗格
独立邮件窗口的选中内容读取代码
Sub GetSelectedTextFromMailWindow() Dim objInspector As Outlook.Inspector Dim objMail As Outlook.MailItem Dim wordEditor As Object Dim selectedText As String ' 获取当前活动的独立邮件窗口 Set objInspector = Application.ActiveInspector ' 校验窗口内打开的是否为邮件 If objInspector.CurrentItem.Class = olMail Then Set objMail = objInspector.CurrentItem ' 获取邮件对应的Word编辑器对象 Set wordEditor = objInspector.WordEditor If Not wordEditor Is Nothing Then ' 将选中的文本赋值给变量 selectedText = wordEditor.Application.Selection.Text ' 后续自定义逻辑可在此处添加 ' 示例:弹窗展示选中内容 MsgBox "你选中的文本是:" & vbCrLf & selectedText End If End If ' 释放对象资源 Set wordEditor = Nothing Set objMail = Nothing Set objInspector = Nothing End Sub
预览窗格的选中内容读取代码
如果你是在主界面的预览窗格中选中文本,使用以下适配代码:
Sub GetSelectedTextFromReadingPane() Dim objExplorer As Outlook.Explorer Dim previewPaneEditor As Object Dim selectedText As String Set objExplorer = Application.ActiveExplorer ' 校验预览窗格是否已开启 If objExplorer.IsPaneVisible(olPreview) = True Then Set previewPaneEditor = objExplorer.PreviewPane.WordEditor ' 将选中的文本赋值给变量 selectedText = previewPaneEditor.Application.Selection.Text ' 后续自定义逻辑可在此处添加 End If ' 释放对象资源 Set previewPaneEditor = Nothing Set objExplorer = Nothing End Sub
内容的提问来源于stack exchange,提问作者Jesper Martin Schumacher
相关产品推荐
相关产品推荐

