高级搜索完成事件未在 VBA 中触发

Posted

技术标签:

【中文标题】高级搜索完成事件未在 VBA 中触发【英文标题】:Advanced search complete event not firing in VBA 【发布时间】:2015-11-01 18:18:34 【问题描述】:

正如标题所示,我无法触发高级搜索完成事件。我正在通过 Excel 2013 运行 VBA。我在 worksheet1 中运行了一个子程序,它创建了一个测试对象,然后运行高级搜索。这一切正常,搜索对象确实返回结果。但是,高级搜索完成事件永远不会触发。有什么想法吗?

谢谢!

主要代码:

Sub testing()

Dim test As Class1
Set test = New Class1

Call test.TestAdvancedSearchComplete

End Sub

第 1 类:

Dim myOlApp As New Outlook.Application
Public blnSearchComp As Boolean
Dim sch As Outlook.search
Dim rsts As Outlook.Results



Private Sub myOlApp_AdvancedSearchComplete(ByVal SearchObject As search)
    MsgBox "The AdvancedSearchComplete Event fired."
    blnSearchComp = True
End Sub



Sub TestAdvancedSearchComplete()
Dim i As Integer

blnSearchComp = False
Const strF As String = "urn:schemas:mailheader:subject = 'Test'"
Const strS As String = "Inbox"

Set sch = myOlApp.AdvancedSearch(strS, strF, False, “Test”)

While blnSearchComp = False
    DoEvents
Wend

Set rsts = sch.Results
For i = 1 To rsts.Count
    Debug.Print rsts.Item(i).SenderName
Next
End Sub

【问题讨论】:

谢谢大家的回复!我已经改变了这两件事,但仍然有问题。 谢谢大家的回复!我已经改变了这两个东西,但仍然有问题。 Pradeep,似乎按照您的建议更改了应用程序声明,在执行之前不存在的搜索时引发了错误 91“对象变量或未设置块变量”。这可能是因为您不能在应用程序声明中使用关键字 new ?此外,只是按照 CBRF23 的建议更改过程名称仍然不会触发事件。 你在哪一行得到这个错误? 它在 Set sch = myOlApp.AdvancedSearch(strS, strF, False, "Test") 上。之所以生成它,是因为当我将“将 myOlApp 作为新 Outlook.Application 调暗”为“Dim WithEvents myOlApp 作为 Outlook.Application”时,我没有声明“set myOlApp = New Outlook.Application”,因为它不允许我保留“新”字在那里(说它是一个无效的关键字或什么的。所以现在一切都在执行,高级搜索正在工作,但事件仍然没有触发。 Pradeep,这解决了问题。非常感谢您的扩展帮助。我已经按照 CBRF23 的建议更改了私人潜艇的名称,但我认为他没有意识到我用完了 excel 而不是 Outlook。 【参考方案1】:

要允许引发事件,您需要使用 WithEvents 声明您的对象

Dim WithEvents myOlApp As New Outlook.Application

【讨论】:

应用程序声明是唯一需要“WithEvents”标签的声明吗? 您要处理其事件的任何对象都需要在声明中使用 WithEvents 附带说明,我还建议您从声明中删除 New 关键字并单独初始化它。声明为Dim WithEvents myOlApp As Outlook.Application 并在新/初始化方法Set myOlApp = New Outlook.Application 中。但这与您提到的问题无关。【参考方案2】:

AdvancedSearchComplete 事件 有一个特殊的过程名称,编译器需要查看它才能将您的代码与事件联系起来。将过程名称更改为:

Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search)

【讨论】:

以上是关于高级搜索完成事件未在 VBA 中触发的主要内容,如果未能解决你的问题,请参考以下文章

具有自动完成功能的高级搜索表单

全屏更改事件未在 Chrome 中触发

CameraCaptureTask 完成事件未在 ViewModel 中触发

Laravel高级搜索查询修复

捕获自动完成文本框交叉图标的事件

JIRA的使用介绍(四)- 高级搜索(JQL)