使用 VBA 宏选择和复制 Outlook 电子邮件正文

2023-11-29

我是 Excel 中 VBA 宏的初学者,这是 Outlook 中的第一次尝试,但这是我正在尝试做的事情:

在 Outlook 2010 中,将宏分配给按钮,按下该按钮时,

  1. 获取活动电子邮件的整个正文
  2. 将正文(包括所有格式和 html)复制到剪贴板
  3. 打开一个新的Word文档
  4. 将剪贴板的内容粘贴到此 Word 文档中
  5. 清除剪贴板

到目前为止,我所拥有的只是下面的步骤 1 和 3(我想知道我是否在步骤 1 中以错误的方式处理此问题):

Sub pasteToWord()

    Dim activeMailMessage As Outlook.MailItem 'variable for email that will be copied.
    Dim activeBody
    Dim clearIt As String 'Intended to eventually clear clipboard.

'Code to get to the body of the active email.
    If TypeName(ActiveExplorer.Selection.Item(1)) = "MailItem" Then _
    Set activeMailMessage = ActiveExplorer.Selection.Item(1)
    activeBody = activeMailMessage.Body
    'MsgBox activeBody
    '^This displayed what I want in plaintext form,
    'so I think im on the right track

'Code to copy selection to clipboard

'Code to open new Word doc
    Set WordApp = CreateObject("Word.Application")
    WordApp.Documents.Add
    WordApp.Visible = True

'Code to paste contents of clipboard to active word document

'Code to clear clipboard

End Sub

任何填补上述空白的指导将不胜感激。

Edit:

感谢 David Zemens,这是迄今为止最接近的结果。我认为我缺少一些参考,因为我的编译器不理解 ClearClipboard() 函数的“DataObject”。不过,它确实会按格式复制并粘贴到 Word 中,如下所示(尽管我必须注释掉最后一个函数以避免错误):

Sub pasteToWord()

    Dim WordApp As Word.Application  'Need to link Microsoft Word Object library
    Dim wdDoc As Word.Document       'for these to be understood by compiler
    Dim activeMailMessage As Outlook.MailItem
    Dim activeBody As String

If TypeName(ActiveExplorer.Selection.Item(1)) = "MailItem" Then

    'Get a handle on the email
    Set activeMailMessage = ActiveExplorer.Selection.Item(1)

    'Ensure Word Application is open
    Set WordApp = CreateObject("Word.Application")

    'Make Word Application visible
    WordApp.Visible = True

    'Create a new Document and get a handle on it
    Set wdDoc = WordApp.Documents.Add

    'Copy the formatted text:
    activeMailMessage.GetInspector().WordEditor.Range.FormattedText.Copy

    'Paste to the word document
    wdDoc.Range.Paste

    'Clear the clipboard entirely:
     Call ClearClipBoard

End If

End Sub

Public Sub ClearClipBoard()
    Dim oData As New DataObject 'object to use the clipboard -- Compiler error, 
                                'I think I'm missing a reference here.

    oData.SetText Text:=Empty 'Clear
    oData.PutInClipboard 'take in the clipboard to empty it
End Sub

这个方法将copy所选邮件项目中的格式化文本,以及paste将其放入word文档中:

Dim WordApp As Word.Application
Dim wdDoc As Word.Document
Dim activeMailMessage As MailItem

If TypeName(ActiveExplorer.Selection.Item(1)) = "MailItem" Then

    'Get a handle on the email
    Set activeMailMessage = ActiveExplorer.Selection.Item(1)

    'Ensure Word Application is open
    Set WordApp = CreateObject("Word.Application")

    'Make Word Application visible
    WordApp.Visible = True

    'Create a new Document and get a handle on it
    Set wdDoc = WordApp.Documents.Add

    'Copy the formatted text:
    activeMailMessage.GetInspector().WordEditor.Range.FormattedText.Copy

    'Paste to the word document
    wdDocument.Range.Paste

    'Clear the clipboard entirely:
     Call ClearClipBoard

End If

NOTE完全清除剪贴板可以很容易地完成功能类似于此处描述的功能:

Public Sub ClearClipBoard() 
    Dim oData   As New DataObject 'object to use the clipboard

    oData.SetText Text:=Empty 'Clear
    oData.PutInClipboard 'take in the clipboard to empty it
End Sub 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 VBA 宏选择和复制 Outlook 电子邮件正文 的相关文章

  • 二维数组作为字典的项目

    我想用一个项目的几个属性填充字典 例子 我正在考虑拥有Item 1 and Item 2 as Dictionary键与array这将保留其属性 我需要能够单独访问项目的每个属性 因此将它们连接为一个字符串不是一种选择 我正在考虑类似下面的
  • 当存储在集合中时,如何更改类属性的值

    我想将一个类存储在集合中 并且能够更改该类的属性 而不必删除集合项并再次将其添加回来 我的研究表明 如果不进行删除 替换操作 则无法更改项目本身 但是项目的属性又如何呢 下面的代码展示了如何执行此操作 当您运行宏时 调试窗口将显示存储对象的
  • 如何获取数据透视表的 ListObject 对象?

    这个问题最初是作为answer https stackoverflow com a 21321664 2712565作者 休 西格雷夫斯 Hugh Seagraves 关于相关问题的文章 他 想要引用一个工作表上的列表对象 表格 而另一工作
  • 在Excel中显示毫秒

    我正在尝试在 Excel 宏中显示毫秒 我有一列整数 它们是以毫秒为单位的时间戳 例如 28095200 是上午 7 48 15 200 我想在它旁边创建一个新列 以保持运行平均值并以hh mm ss 000格式 Dim Cel As Ra
  • 向用户显示多条验证消息

    在 MS Access 中 如何将从 SELECT 语句检索到的行存储在数组中 并在一个消息框中显示多行 Dim rSEL rSUM rDes As DAO Recordset Dim vItem id vQnty vSum As Inte
  • 如何获取 Word 应用程序的 Hwnd/进程 ID,并将其设置为前台窗口

    我希望我的 Word 应用程序在自动化完成后进入前台 Excel 中的等效项很简单 Excel Application 对象有一个 Hwnd 属性 您可以将其与 Windows API 结合使用 SetForegroundWindow In
  • 通过 Excel VBA 保存并关闭 powerpoint

    下面的代码根据定义的名称创建多个图表 然后打开具有这些定义的名称的 powerpoint 文件并转储到图表中 除了最后一部分之外 一切都正常 保存并关闭文件 我已将尝试保存和关闭文件的尝试标记为绿色 任何帮助表示赞赏 Sub Slide19
  • 从 RichTextBox 复制文本及其格式

    如何将 RichTextBox 中的文本及其格式复制到写字板或网络浏览器 就像复制纯文本一样 您可以使用Clipboard SetText method http msdn microsoft com en us library 6eahs
  • 如何锁定特定单元格但允许过滤和排序

    我使用以下代码来锁定某些单元格的内容 Sub LockCell ws As Worksheet strCellRng As String With ws Unprotect Cells Locked False Range strCellR
  • 尝试使用 Excel 中的 VBA 从网页中提取一个值

    我几天来一直在尝试查找信息 但是我找到的所有示例都只有一小段代码 我需要全部 我想要做的是从主页中提取一个值并将其放入 Excel 的单元格中 然后从同一站点上的另一个页面获取另一个值并放入下一个单元格等 该页面是瑞典证券交易所页面 我用作
  • excel vba 中的智能卡和 ISO 7816 入门 ( SCardEstablishContext )

    我刚刚收到了标准的便宜货USB 智能卡读卡器 http stanleyglobaltech com sgt111 html 我正在尝试找出如何使用 Excel 中的 VBA 与其进行交互 我在尝试在工作簿中创建基本智能卡功能时编写了此内容
  • 使用 python 制作本地服务器应用程序的最佳方法

    我想要简单轻松地集成 python 和 vba 人们 如果他们在阅读本文后亲自见到我 阅读本文可能会杀了我 但我正在使用 django 开发服务器来实现此目的 有没有什么简单又好的方法 仅举个例子 我想使用 python 模块 openpy
  • 宏VBA获取Outlook 2003中选定的文本

    我正在尝试使用此代码片段来获取 Outlook 2003 中选定的文本 Sub SelectedTextDispaly On Error Resume Next Err Clear Dim oText As TextRange Get an
  • 从新的 xlsx 文件中删除宏

    功能部分 下面的代码将 xlsm 文件中的 2 个选项卡保存到新的 xlsx 文件中 文件保持打开状态以进行编辑 错误 xlsm 选项卡在工作表代码中有触发器 该触发器无效 一旦在 xlsx 工作表中输入任何内容 就会导致错误 所需输出 编
  • 在 Java 中使用 Apache POI XWPF 在同一个 Word 文档中横向和纵向页面

    我正在尝试使用 Java 和 Apache POI 库创建一个包含一些横向页面和一些纵向页面的 Word 文档 我可以更改所有页面的方向 但有没有办法只更改其中某些页面的方向 我尝试过使用不同的部分和主体 但无济于事 目前我已经编写了一个函
  • 如何通过C#通过OpenXML从Word(.Docx)中提取OLE文件

    我想用Openxml抽象 OLE package 从一个 docx 文件 我不知道该怎么做 并且在官方示例中没有找到任何相关示例 请帮我 这是我的尝试 我通过 MS Office 2016 构建了一个 Docx 文件 名为 Test doc
  • 将 VBA 字符串转换为双精度

    我正在使用非常基本的 VBA for word 编码来创建一个模板 该模板可以从 Windows 中的其他屏幕中提取数据 当它提取数字时 它们被格式化为字符串 我现在需要将字符串转换为双精度 以便对它们进行加 减 我一直在尝试一切 但似乎无
  • 如何使用 VBA 忽略范围内的绿色三角形错误,而不逐个单元循环?

    我有一些正在自动化和分发的大型数据集 我想消除警告用户有关存储为文本的数字的绿色小三角形 我使用了以下代码 但在大量纸张上速度非常慢 Range Cells 1 1 Cells lastrow lColumn Select kill tho
  • 如何使用VBA删除工作簿中的空白工作表?

    Sub delete Dim sh As Worksheet wb As String c As Range wb InputBox work book name Set sh Workbooks wb Sheets For Each Sh
  • VBA 从文本文件的属性获取日期

    我正在尝试获取特定文本文件上传到计算机的日期 该日期不在实际的文本文件中 您必须右键单击然后转到属性才能查看日期 我需要将日期读入变量 我不知道从哪里开始尝试完成这件事 谢谢你 杰西 斯莫瑟蒙 如果内置FileDateTime 不是你可以使

随机推荐

  • 具有端口和工具项(删除、设置等)的 JointJS 元素

    我设法通过端口增强我的 SVG 形状 joint shapes devs Element joint shapes basic Generic extend extend joint shapes basic PortsModelInter
  • 在 HttpModule 内渲染页面?

    有人知道如何在 HttpModule 中渲染 aspx 页面并将其流回浏览器吗 你可以这样做 Type page type BuildManager GetCompiledType page aspx Page page Page Acti
  • 尝试添加新环境时,Aws Beanstalk nginx 被终止

    每次需要从 AWS EBS 面板添加新的环境变量时 我都会收到此错误 AWS Beanstalk 事件 2018 02 16 14 49 21 UTC 0200 INFO The environment was reverted to th
  • 从图像本地目录创建tensorflow数据集

    我在本地有一个非常庞大的图像数据库 数据分布就像每个文件夹都包含一个类的图像 我想使用tensorflow数据集API来获取批量数据 而无需将所有图像加载到内存中 我尝试过这样的事情 def parse function filename
  • Xdebug 断点总是有效,除非使用 @runTestsInSeparateProcesses 时?

    我终于让 Xdebug 可以工作 包括断点和 跳过 的能力 来进行单元测试 功能测试以及在浏览器中进行浏览 然而 每当我使用 runTestsInSeparateProcesses因为这个原因 Netbeans 断点不再起作用 如何在使用
  • 登录脚本使用机器密码让 kinit 在登录时获取票证

    我同步登录我的机器的密码 密码 解锁我的 ssh 密钥文件 ssh id rsa see man ssh keygen 和 kerberos 当我登录时 我输入一次密码来访问我的本地计算机帐户 作为奖励 我的 ssh 密钥文件也被解锁 我还
  • 正则表达式:括号中的必需字符

    如何搜索仅包含一组字符的字符串 包括x 并要求它包含 x 例如 a z 但如果不包含则不匹配x 所以它应该匹配quux但不是foo or bar 假设您想匹配仅包含 x y 或 z 的字符串 则匹配 start 后跟零个或多个y or z
  • PHP 7 - 如何搜索数组的多个特定成员

    我有一个 PHP 数组 如下所示 array size 3 CA Santa Barbara gt array size 2 state gt string CA length 2 city gt string Santa Barbara
  • 在我的情况下,如何以编程方式在另一种布局之上显示一种布局?

    我的主要布局main xml仅包含两个 LinearLayout The 1st LinearLayout主持一个VideoView and a Button The 2nd LinearLayout主办EditText 和这个Linear
  • 将逗号替换为点 Pandas

    给定一个相当长的数组 如下所示 我想用点替换逗号 array 0 140711 0 140711 0 0999 0 0999 0 001 0 001 0 140711 0 140711 0 140711 0 140711 0 140711
  • 从 $_POST 表单数据 PHP 中删除提交按钮值

    我正在使用此循环打印所有表单 POST 数据 foreach POST as name gt value print name value br 结果的末尾是提交按钮值 提交 编辑 这对我来说会导致错误 因为通过这个 foreac 循环 我
  • PHP firebird将blob文件插入数据库apache突然停止工作

    我目前正在火鸟数据库上插入图像 它单独工作正常 请参阅下面的代码 dbh ibase connect host user pass blh ibase blob create dbh ibase blob add blh data blob
  • 如何使用urllib2获取使用SSLv3加密的网页

    我正在使用 python 2 7 我想获取需要 sslv3 的网页的内容 目前 当我尝试访问该页面时 我收到错误 SSL23 GET SERVER HELLO 并且在网络上进行了一些搜索 导致我找到了以下解决方案 该解决方案修复了 Pyth
  • 使用 this.refs 的弃用警告

    我有一个 React 组件 我想在单击时切换 css 类 所以我有这个 export class myComponent extends React Component constructor super this state clicke
  • 如何使用 Paramiko 等 Python 库通过 Telnet 和 SSH 进行链式连接

    类似于这里提出的问题 使用 python SSH 和 telnet 到本地主机 我正在尝试找到以下问题的解决方案 从服务器A 完全权限 通过Jumhost B 无sudo 我想使用Python连接到多个网络设备 一个接一个就足够了 不必在同
  • Asp.net Mvc区域路由问题

    我希望网站的默认页面为 Login cshtml 我得到异常 错误 未找到视图 登录 或其主视图 或者没有视图引擎支持搜索的位置 搜索了以下位置 我有2个区域 结构如下图所示 我的路由配置如下所示 using System using Sy
  • ARM中如何做除法?

    我正在尝试找到如何在 ARM 中进行除法 因为没有DIV命令 如果可以通过浮点数相乘来完成 9 0 09 通过减法或通过使用库 任何方式都可以 目前我正在使用像这样的循环使用减法进行除法 但我丢失了小数 MOV R0 70 Fahrenhe
  • Google 地图中的自定义标记和航点标记

    我正在寻求帮助 我有下面的谷歌地图代码 工作正常 我唯一需要的是起点上的自定义标记 51 943382 6 463116 并且航路点上没有标记 这可以做到吗 我已经尝试了 Stackoverflow 的几种解决方案 但我对 GM 代码和编程
  • 输入类型=文件和 Spring Boot 的 Angular 2 模板表单

    我有一个包含两个输入的表单 一种是文本类型 另一种是文件类型 我怎样才能将文件传递到后端Spring Boot 以及如何使用 postgresql 数据库存储或获取内容数据 预先感谢您的退货 HTML 文件
  • 使用 VBA 宏选择和复制 Outlook 电子邮件正文

    我是 Excel 中 VBA 宏的初学者 这是 Outlook 中的第一次尝试 但这是我正在尝试做的事情 在 Outlook 2010 中 将宏分配给按钮 按下该按钮时 获取活动电子邮件的整个正文 将正文 包括所有格式和 html 复制到剪