首页 > 解决方案 > Lotus Notes 数据库搜索

问题描述

我正在尝试编写代码来打开 VBA 并根据 A1 中的单元格值(整数)进行搜索。我设法编写了一个代码,直到我可以打开莲花笔记并转到特定数据库。我尝试了许多在线代码,但无法在该数据库中找到要搜索的代码。“Lotus.NotesSession”不适用于我使用的 excel 版本。你能帮我完成这段代码吗?代码如下:

Sub macro4()

Dim uiWs As Object
Dim dbname As String
Dim serverName As String
Dim db As NotesDatabase
Dim doccol As NotesDocumentCollection
Dim varA As Integer



dbname = "***"

serverName = "***"


Set uiWs = CreateObject("Notes.NotesUIWorkSpace")

Call uiWs.OpenDatabase(serverName, dbname) 

Set db = uiWs.GetDatabase(serverName, dbname) ---->where i get the error

varA.Value = Sheets("sheet1").Range("A1").Value

Set doccol = db.FTSearch(varA, Nothing, 0)

End Sub

标签: excelvbalotus-noteslotus-dominolotus

解决方案


在 Notes 中有两个“父”类可以派生所有内容。NotesUIWorkspace 是“前端”的类:它包含您在客户端中看到的所有内容。NotesSession 是后端的类。NotesDatabase 是一个后端类。要正确获取数据库,您需要使用 NotesSession:

Set ses = CreateObject("Notes.NotesSession")
Set db = ses.GetDatabase(serverName, dbname)

您混淆了 COM 和 OLE 集成。您尝试使用的东西(Lotus .NotesSession)仅适用于 COM,您需要在项目中包含 Notes 才能使用它。

为了使您的示例正常工作,您需要使用 OLE 集成:Notes .NotesSession

现在到您的“搜索” - 代码:

搜索 NotesDatabase 有两种不同的方法:

有全文搜索和“正常”搜索。

Fulltextsearch只是在所有文档中到处搜索您的值并返回一个集合在邮件文件中搜索“Tom”将找到所有邮件/日历条目,其中:

  • 汤姆寄来的
  • 汤姆收到
  • 在邮件的主题或正文或附件中包含“Tom”一词。

FTSearch 的语法是:

Set doccol = db.FTSearch( YourSearchValue )

您可以通过对搜索使用特殊语法将搜索限制在某个特定字段。eG 仅在您可以编写的“发件人”字段中搜索

[From] = "YourSearchValue" 

在 FTSearch 中,“=”总是意味着“包含”

普通搜索使用公式(@Formula- 语法)来搜索文档。它需要正确的语法,否则它将找不到任何东西。搜索来自“Tom”的所有文档的公式是:

@Contains( From ; "Tom" )

搜索的语法是:

Set doccol = db.Search( YourQueryAsExampleAbove, Nothing, 0 )

With Nothing = Cutoffdate(如果只返回在该日期之后创建或修改的文档)和 0 = 最大值。要返回的文档数(0 = 返回所有内容)。

因此,您的示例代码可能类似于:

strQuery = "FieldToSearch = " & Sheets("sheet1").Range("A1").Value
Set doccol = db.Search( strQuery, Nothing, 0 )

推荐阅读