【问题标题】:What VBA method could Outlook trigger as mail is composed or replied?在撰写或回复邮件时,Outlook 可以触发什么 VBA 方法?
【发布时间】:2018-09-04 01:54:56
【问题描述】:

我具体需要什么指导:

在新的邮件撰写中提供本地 VBA 方法的指示,该方法将在任何书面单词/短语(或尽可能频繁)处触发,或有关如何创建的指导动态表单属性的可观察对象。

目的:

一个可能有趣的 Outlook 功能是在撰写邮件时了解其可读性值。我知道可以通过拼写检查来获得它们,但我想避免进行拼写检查以获得结果的负担 - 我希望看到数字在写邮件时上下波动 /em>。

问题:

我有点创建了我需要的函数,但我没有找到一个可以在每写一个字时触发它的方法。我假设它类似于WordEditor_ChangeHTMLBody_Change 或类似的东西。它类似于我们在 Excel 中的Worksheet_Change,可以在编辑 Excel 工作表时获取值。

我尝试设置 WordEditor.words.count 的 observable,但也惨遭失败。

到目前为止我所拥有的:

WithEvents myMail As Outlook.MailItem

Private Sub Application_ItemLoad(ByVal Item As Object)
    
    Set myMail = Item
    
End Sub

Sub checkStatistics()
    
    Dim objInsp As Outlook.Inspector

    Set objInsp = myMail.GetInspector
    
    'Enum Outlook: https://msdn.microsoft.com/es-es/VBA/Outlook-VBA/articles/olobjectclass-enumeration-outlook
    If objInsp.EditorType = olEditorWord Then ' outlook 2013
        
        'Doc obj: https://msdn.microsoft.com/en-us/vba/word-vba/articles/document-object-word
        Set objdoc = objInsp.WordEditor
         
        Dim var As ClassHandlesEvent
        Dim tst As classWithEvent
        
        Set var = New ClassHandlesEvent
        Set tst = New classWithEvent
        var.EventVariable = tst
        tst.value = objdoc.Words.Count
         
         MsgBox objdoc.ReadabilityStatistics(9) & ": " & objdoc.ReadabilityStatistics(9).value & vbCrLf & "(Ideal values above 60)"
         MsgBox objdoc.ReadabilityStatistics(8) & ": " & objdoc.ReadabilityStatistics(8).value & vbCrLf & "(Ideal values above 60)"
         
    End If

    Set objdoc = Nothing
    Set objInsp = Nothing
    
End Sub

【问题讨论】:

  • 是的,您可以在打开邮件项时触发 vba 宏-但我不会使用 Application_ItemLoad 参见此处的示例-stackoverflow.com/a/40015124/4539709
  • 谢谢@ashleedawg - 审查我的帖子,它的结构很糟糕。我没有要求任何人向我提供一段代码,而是要求提供可以帮助我实现所需的特定方法。我已经重写了这个问题,希望现在已经清楚了。
  • 感谢@0m3r,正如您在我的代码中看到的那样,我能够创建检查器并以您提供的类似方式使用它(+1!)。但我的问题是我需要一个特定的方法,当正文邮件发生变化时会调用它(即一个不断调用的宏,而不是在创建新邮件时一次性调用)。这有意义吗?对于相同的目标,您会看到任何其他方法吗?
  • 您是否知道已经有各种 [免费] Office 插件(包括 Outlook)可以执行此操作以及更多功能? (Here's one 你可能听说过。)
  • @TiagoCardoso - 啊,是的,有趣的 ol' 锁定工作环境,其中“系统安全”最终成为障碍而不是帮助......我也有过这样的工作场所。 :-((这是我的一个相关的recent post。)你找到解决方案了吗?

标签: vba outlook outlook-2016


【解决方案1】:

您执行的以下代码

Set objdoc = objInsp.WordEditor

给你一个WordDocument,所以现在你有一个 WordVBA 问题而不是 OutlookVBA 问题。所以你想要一个关于文档更改的onchange 事件

我在 SO 内外有很多线程,这证实了这样的事件不存在

http://www.vbaexpress.com/forum/showthread.php?15718-Is-there-a-text-change-event-for-Word

Is there a way to trigger "track changes" through VBA in Excel?

Detecting when data is added to a document, eg. a character or white space

http://www.vbaexpress.com/forum/showthread.php?40690-MS-WORD-2k7-Table-content-change-event

所以你需要使用你现在拥有的,即检查电子邮件发送的内容

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 2017-05-13
    • 2012-01-16
    相关资源
    最近更新 更多