触发 Outlook 事件:更改签名

2024-04-26

有谁知道是否可以在 Outlook 2016 中触发签名更改事件? IE。模拟点击签名,如下图所示:

我正在尝试根据选择的“发件人”地址自动更改签名。我可以捕获“发件人”地址更改(如所回答here https://stackoverflow.com/q/42654337/1596582).

但是我找不到以编程方式更改签名的方法。我的研究得出的结论是CommandBar对象在 Office 2016 中已弃用,我需要与IRibbonUI目的。或者也许是其他一些 Ribbon 对象?或者除了假装点击按钮之外,也许还有更好的选择签名的方法?

I cannot find a Signature object in the Outlook namespace with leads me to conclude that the MailItem class does not know about signatures - it only knows about body text. However what is odd is that I can right-click on the signature body and bring up a context menu: enter image description here

所以某处有某个对象must了解签名 - 也许是电子邮件编辑器?

非常感谢


哇,好吧,所以想通了,但这是实现结果的相当迂回的方式。感谢@niton这个方便的评论 https://stackoverflow.com/questions/42723453/trigger-outlook-event-change-signature#comment72567917_42723453为我指明正确的方向。

总之,它执行以下操作:

  • 引发事件时SentOnBehalfOfName财产在MailItem被改变了
  • 根据名为 的书签的存在删除当前签名_MailAutoSig
  • 根据选择的发件人选择 html 签名
  • 插入html签名文件内容并添加名为的书签_MailAutoSig

这是我迄今为止实现的代码:

Dim WithEvents myInspector As Outlook.Inspectors
Dim WithEvents myMailItem As Outlook.MailItem

Private Sub Application_Startup()

    Set myInspector = Application.Inspectors

End Sub

Private Sub myInspector_NewInspector(ByVal Inspector As Outlook.Inspector)

    If TypeOf Inspector.CurrentItem Is MailItem Then
        Set myMailItem = Inspector.CurrentItem
    End If

End Sub

Private Sub myMailItem_PropertyChange(ByVal Name As String)
On Error GoTo ErrorCatcher

    Dim signatureName As String
    Dim signatureFilePath As String

    ' Properties we are interested in: "SendUsingAccount" / "SentOnBehalfOfName"
    ' Both get fired when the 'From' field is changed/re-selected
    ' So we are only going to trigger on one event or we will call the code twice
    If Name = "SentOnBehalfOfName" Then

        ' Delete the current signature
        Call DeleteSignature(myMailItem)

        ' Insert the new signature at the current cursor point
        ' The cursor will be at the point where the old signature was deleted
        signatureName = GetSignatureName(myMailItem.SentOnBehalfOfName)
        signatureFilePath = GetSignatureFilePath(signatureName)
        Call InsertSignature(myMailItem, signatureFilePath)

    End If

    Exit Sub

ErrorCatcher:

    MsgBox Err.Description

End Sub

Private Function DeleteSignature(objMail As MailItem)

    Dim objDoc As Word.Document
    Dim objBkm As Word.Bookmark

    Set objDoc = objMail.GetInspector.WordEditor

    If objDoc.Bookmarks.Exists("_MailAutoSig") Then
        Set objBkm = objDoc.Bookmarks("_MailAutoSig")
        objBkm.Select
        objDoc.Windows(1).Selection.Delete
    End If

End Function

Private Function GetSignatureName(sender As String)

    Select Case sender

        Case "Sender Name 1"
            GetSignatureName = "Signature 1"

        Case "Sender Name 2"
            GetSignatureName = "Signature 2"

        Case Else
            GetSignatureName = "Default"

    End Select


End Function

Private Function GetSignatureFilePath(signatureName As String) As String

    GetSignatureFilePath = Environ("AppData") & "\Microsoft\Signatures\" & signatureName & ".htm"

End Function

Private Function InsertSignature(objMail As MailItem, signatureFilePath As String)

    Dim objDoc As Word.Document
    Dim rngStart As Range
    Dim rngEnd As Range

    Set objDoc = objMail.GetInspector.WordEditor

    Set rngStart = objDoc.Application.Selection.Range
    rngStart.Collapse wdCollapseStart

    Set rngEnd = rngStart.Duplicate
    rngEnd.InsertParagraph

    rngStart.InsertFile signatureFilePath, , , , False
    rngEnd.Characters.Last.Delete

    objDoc.Bookmarks.Add "_MailAutoSig", rngEnd

End Function
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

触发 Outlook 事件:更改签名 的相关文章

  • IE.navigate2 因保护模式关闭而失败

    我正在从 Excel VBA 自动化 IE8 Excel 2010 Windows 7 Set IE CreateObject InternetExplorer Application IE Navigate2 URL 如果 URL 是处于
  • 需要在Excel中合并3列

    我有 3 列 A B C 我需要合并这 3 列 并且我已经应用了 forumala A1 B1 C1输出为 E 列 我需要输出为 D 列 下面的公式将达到您想要的结果 TEXTJOIN TRUE A1 C1 Textjoin 的工作方式类似
  • VBA 中的 VSTO:AddIn.Object 有时不返回任何内容 (null)

    Given VSTO 插件 An override object RequestComAddInAutomationService 它返回一个名为的类的实例Facade在我的场景中 Excel 2007 中的 VBA 宏可访问AddIn O
  • 具有多个条件(全部等于相同值)的 IF 语句的替代方案

    还有比这更好的方法吗 假设所有变量都为零 If var1 0 Or var2 0 Or var3 0 Or var4 0 Or var5 0 Or var6 0 Then do something End If 你可以用Select Cas
  • 如果 FIND 函数在 vba 中找不到任何内容,那么[重复]

    这个问题在这里已经有答案了 我目前正在自动化执行以下步骤的手动流程 1 提示用户打开一个数据文件并打开文件 2 插入4列 3 使用文件中已有的数据创建格式为 DD MM YYYY TEXT 的唯一字符串 其中文本是变量 4 使用 if 语句
  • 即使 Excel 中存在多条记录,CopyFromRecordset 也仅复制并粘贴第一行

    我有一个包含表格数据的 Excel 工作表 strSQL SELECT S FIELD NAME1 S FIELD NAME2 S FIELD NAME3 from SourceData A1 IV6 S Dim cn as ADODB C
  • VBA 访问:从另一个表单的代码刷新一个表单

    编辑 没关系有人帮助了我 form name recalc 或 form name refresh form main recalc 我有两种形式 主要 详细信息 在 主 表单中 我有一个在对话框中打开 详细信息 的按钮 问题是我在 详细信
  • 将包含换行符的文本文件导入到 Excel 中

    我有一个纯文本文件 如下所示 some text containing line breaks 我正在尝试说话excel 2004 Mac v 11 5 正确打开此文件 我希望只看到一个单元格 A1 包含上述所有内容 不带引号 但可惜的是
  • 标准 VBA 函数“找不到项目或库”

    因此 我必须在我的 PC 上运行别人的 Excel 应用程序 并且在标准函数 如日期 格式 十六进制 中间等 上收到 找不到项目或库 的信息 一些研究表明 如果我在这些函数前加上 VBA 前缀 如 VBA Date 中那样 它会正常工作 网
  • MS Access 执行 POST Web 请求

    在我的 MS Access 应用程序中 我需要定期向我的网络服务器发送一批信息 我不需要任何花哨的东西 比如 SOAP XML RPC 或任何东西 只需一个简单的 POST 页面请求就足够了 我用谷歌搜索了一下 但找不到任何真正有用的东西
  • Excel VBA 过滤和复制粘贴数据

    给定一个数据集 假设有 10 列 在 A 列中我有日期 在 B 列中我有 我想仅过滤 A 列 2014 年的数据 B 列 ActiveSheet Range A 1 AR 1617 AutoFilter Field 5 Operator x
  • VBA根据单元格的值是否为零显示/隐藏行

    我有一个 Excel 工作表 我想根据另一个单元格中的值隐藏或取消隐藏某些行 简而言之 整个事情应该取决于单元格中的值C2 D2 E2 If C2 is blank我想rows 31 to 40被隐藏 如果是的话不为空 他们需要是visib
  • Excel工作簿关闭后反复打开

    我使用了 Application ontime 方法来调度一些宏 关闭工作簿后 它会一次又一次地打开 为了解决这个问题 我在工作簿上设置了另一个事件 BeforeClosed 现在它显示运行时错误 1004 Object Applicati
  • 所以,我有 6 个“主”文件,然后分为 40 个单独的文件

    我将简要描述我想要的内容 我有 6 个 主 文件 每个文件包含 40 个工作表 如下所示 AG 工作簿有 HR Gp 1 到 HR Gp 40 ER 工作簿有 FB Gp 1 到 Gp 40 等 所有工作表都已 平坦 我已经成功创建了一个适
  • 将 Excel 范围转换为 VBA 字符串

    我想将给定范围内的值转换为 VBA 字符串 其中原始单元格值由任何选定的列分隔符和行分隔符分隔 分隔符可以是一个字符或更长的字符串 行分隔符是行末尾的字符串 该字符串应该像我们从左上角 从左到右 到右下角读取文本一样完成 以下是范围 A1
  • 如何将参数从 Excel/VBA 传递到 Rstudio 中的脚本

    我正在尝试使用 Rstudio 从 VBA 打开 R 脚本 同时将参数传递给 R 脚本 然后我可以使用 commandArgs 访问该脚本 该问题与此处描述的问题非常相似 WScript Shell 用于运行路径中包含空格且来自 VBA 的
  • 如何隐藏组合框下拉列表中的列?

    我正在 Excel 用户窗体中构建一个 ComboBox 该用户窗体从 Access 表中获取其行 我想在下拉列表中向用户显示多个文本字段 但从 ComboBox 返回的值应该是与用户选择的行关联的 ID 号 即 ID 列是绑定列 但我不想
  • 将用户定义的表类型从 VBA 传递到 SQL

    我的任务是创建一个 Excel 电子表格作为 SQL 数据库的前端 以及一些对数据执行复杂计算的 C 我的老板想要前端作为电子表格 而计算对于 VBA 来说似乎太复杂了 目前 检索数据集的存储过程运行良好 然后 用户将在 Excel 中编辑
  • Excel 的 VBA - 如何检查范围的交集不为空

    我有两个问题 1 如何检查交集或范围是否不为空 例如 如果我想检查它是否为空 我会写 if application intersect r1 r2 is nothing 但有什么东西是否定虚无的吗 例如 并非没有任何事情不起作用 2 如何比
  • 在用户窗体终止/关闭 VBA 时调用数组

    我有一个问题 我想在用户窗体关闭时将用户窗体的内容存储在数组中 我认为我的语法正确 但似乎不会在用户窗体初始化时重新填充 我尝试将数组放入其自己的模块中 但这也不起作用 有人愿意启发我吗 示例代码 Public Sub DPArrayStu

随机推荐

  • Java、类路径、类加载 => 同一 jar/项目的多个版本

    我知道对于经验丰富的程序员来说这可能是一个愚蠢的问题 但我有一个库 一个 http 客户端 我的项目中使用的一些其他框架 jar 需要它 但它们都需要不同的主要版本 例如 httpclient v1 jar gt Required by c
  • 迭代器后继者

    我想用另一个迭代器 同类 的后继者初始化一个迭代器 任意类型 以下代码适用于随机访问迭代器 但不适用于前向或双向迭代器 Iterator i j 1 一个简单的解决方法是 Iterator i j i 但这不起作用初始化语句for 循环的
  • 如何通过分页从附加页面中提取数据

    我成功返回了第一页数据 并获得了 API 调用中存在的附加数据页数 这是我尝试提取附加数据页的代码 try const response UrlFetchApp fetch root endpoint params const respon
  • 如何从右向左对齐日期选择器?

    datepicker dob on click function datepicker datepicker format dd mm yyyy autoclose true
  • 设计评论表

    基本上我想创建一个评论系统 其中评论可能有也是评论的父母 但我也希望他们可能有可能是其他东西的父母 例如用户或产品 即 我希望能够对产品发表评论 用户 其他评论或几乎任何资源 我该怎么做呢 当前表 标签 产品 用户 评论 编辑 这将适用于流
  • jQuery 获取容器的 html,包括容器本身

    我如何获取 container 上的 html 包括 container 而不仅仅是其中的内容 div div test 1 div div test 2 div div test 3 div div test 4 div div 我有这个
  • 多个 Docker 容器和 Celery

    我们现在的项目结构如下 处理来自客户端的传入请求的 Web 服务器 向用户提供一些建议的分析模块 我们决定保持这些模块完全独立 并将它们移动到不同的 docker 容器中 当用户的查询到达网络服务器时 它会向分析模块发送另一个查询以获取推荐
  • 如果我们不需要位图,是否必须显式回收它?

    位图有一个recycle方法 但是如果我们不再需要它 是否必须显式调用它 例如 一个ImageView现在有一个位图 当用户单击按钮时 它将为 ImageView 设置一个新的位图 在分配新位图之前我们是否必须回收原始位图 是的 如果您的目
  • 如何在ggplot的facet_grid函数中应用下标

    我想使用 ggplot 绘制空气污染物与出生体重变化之间的关联结果 95 CI 我的数据格式是这样的 variable exposure period coef coef lb coef ub PM10 entire pregnancy 2
  • 如何从在 Cron 作业上运行的 Python 解锁 Gnome 密钥环?

    我正在连接一个 Python 脚本来与 cron 一起运行 在 Ubuntu 12 04 上 但身份验证不起作用 cron 脚本访问几个服务 并且必须提供凭据 存储这些凭证keyring很简单 只不过当 cron 作业实际运行时 无法检索凭
  • Map:如何获取与某个值关联的所有键?

    给定一个 Map 如何查找与特定值关联的所有键 例如 Map
  • 背包多重约束

    我有一个动态规划问题 我花了几个小时研究但没有结果 第一部分很简单 你有一背包物品 你必须最大化这些物品的价值 同时将它们保持在一定的重量以下 问题的第二部分是相同的 只是现在也有一个项目限制 例如 您可以放入袋子中的物品的最大价值是多少
  • 查看 PHP 闭包的源代码

    是否可以反映或以其他方式查看 PHP 闭包对象的源代码 也就是说 如果我做这样的事情 closure function return Hi There 然后是这样的 var dump closure PHP 输出 object Closur
  • 是否可以在activerecord中定义与SQL表达式对应的虚拟属性?

    我正在寻找类似虚拟属性的东西 但这可以在数据库级别上工作 假设我有一个字段age我想添加一个 虚拟字段 age quintile这等于age 5 但可以这样说 Person select age quintile agv height gr
  • Python 元组作为键慢吗?

    我正在尝试实现字典中排序元组的快速查找 回答 元组 3 8 是否有关联值 如果有 它是什么 的问题 令元组中的整数从下方以 0 为界 从上方以 max int 为界 我继续使用 Python 的 dict 但发现速度相当慢 解决此问题的另一
  • 获取以 UTC 表示的当前时间的最简单 PowerShell 方法

    我已查看该帖子在 PowerShell 中创建具有特定 UTC 日期时间的 DateTime 对象 https stackoverflow com questions 10487011 creating a datetime object
  • 非活动状态下的 Spring Boot 堆使用情况

    我在本地部署了一个非常简单的 spring boot 应用程序 它只有一个类 控制器 差不多就这样了 我注意到堆分配并不稳定 并且有峰值和突然下降 为什么会这样 我没有对应用程序进行过一次调用 A view from VisualVM 事实
  • 释放指针向量,但内存仍在使用中

    我不知道下面的代码有什么问题 我正在删除所有指针 但是当我使用 top 命令查看内存时 我可以看到仍然有大量内存分配给程序 我在这里缺少一些东西来释放内存吗 include
  • 重新加载 tslib 触摸屏校准

    背景 我正在开发一个基于 Qt 的大型 GUI 它处理与触摸屏的所有用户交互 该程序的设计使得用户不需要访问命令提示符即可执行任何操作 包括重新校准触摸屏 我写了一个 tslib 的模仿品ts calibrate作为运行的实用程序QWidg
  • 触发 Outlook 事件:更改签名

    有谁知道是否可以在 Outlook 2016 中触发签名更改事件 IE 模拟点击签名 如下图所示 我正在尝试根据选择的 发件人 地址自动更改签名 我可以捕获 发件人 地址更改 如所回答here https stackoverflow com