我正在尝试编写代码以打开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
答案 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”将找到以下位置的所有邮件/日历条目:
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对象。