Lotus Notes数据库搜索

时间:2019-01-28 04:43:59

标签: excel vba lotus-notes lotus-domino lotus

我正在尝试编写代码以打开VBA,并根据A1(整数)中的单元格值进行搜索。我设法编写了一个代码,直到可以打开Lotus Notes并转到特定的数据库。我尝试了许多在线代码,但无法在该数据库中找到要搜索的代码。 “ 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

2 个答案:

答案 0 :(得分:2)

在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

现在进入“搜索”-代码:

有两种方法可以搜索Notes数据库:

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

全文搜索仅在所有文档中的所有位置搜索您的值并返回一个集合。在邮件文件中搜索“ Tom”将找到以下位置的所有邮件/日历条目:

  • 汤姆发送的
  • 汤姆(Tom)收到
  • 主题或正文或邮件附件中带有“汤姆”一词。

FTSearch的语法是:

Set doccol = db.FTSearch( YourSearchValue )

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

[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 )

答案 1 :(得分:0)

成功调用OpenDatabase后,您可以使用

set uiDb = uiWS.CurrentDatabase 

这将得到一个NotesUIDatabase对象,然后您可以使用

set db= uiDb.Database 

这将为您提供调用FTSearch方法所需的NotesDatabase对象。