2017-05-24 136 views
1

我正在嘗試編寫將從Lotus Notes文檔中的字段中讀取數據的VBA代碼。目前,我可以使用FieldGetText方法讀取數據,但只有打開文檔時才能使用。我需要能夠循環瀏覽文檔而不打開它們,因爲有幾百個。我需要能夠從許多文檔中讀取這些相同的字段,但無法弄清楚如何循環遍歷它們。我的代碼目前是:通過VBA讀取Lotus Notes文檔中的字段

Set LotusNotes = CreateObject("Notes.NotesUiWorkspace") 
    Set CurrentDoc = LotusNotes.CurrentDocument 
    While Not (CurrentDoc Is Nothing) 

    ' Affectation of data 
    DueDate = CurrentDoc.FieldGetText("RevDueDate") 
    DueTime = CurrentDoc.FieldGetText("RevDueTime") 
    DateClosed = CurrentDoc.FieldGetText("DateClosed") 

    Wend 

據我所知,這使用前端對象。我能夠使用後端對象,可以遍歷文檔(不打開它們),但數據(特別是日期)與文檔中的字段文本不匹配。該代碼是這樣的:

Set LotusNotes = CreateObject("Notes.NotesSession") 
Set db = LotusNotes.GetDatabase("") 
Set view = db.GetView(view_name) 
view.AutoUpdate = False 
Set columnview = view.AllEntries 

Set doc = view.GetFirstDocument 
While Not (doc Is Nothing) 
    revDate = doc.GetItemValueDateTimeArray("RevDueDate") 
    revDate = doc.RevDueDate 
Set doc = view.GetNextDocument(doc) 
Wend 

基本上,我只是想知道,如果有可能通過使用NotesUIWorkspace類,我第一次嘗試,或是否有可能在NotesWorkspace類以某種方式使用FieldGetText不是多個文件循環。

任何幫助表示讚賞,謝謝。

回答

0

這是可能的,也更好地使用「後端」對象Notes.NotesSession。所以,試試這個:

Set doc = view.GetFirstDocument 
While Not (doc Is Nothing) 
    'Check if you have the field in the document 
    if doc.HasItem("RevDueDate") Then 
     revDate = doc.getFirstItem("RevDueDate").Text 
    End If 
Set doc = view.GetNextDocument(doc) 
Wend 

也可以通過在客戶端打開每個文件,獲取字段中的數據,並關閉文檔使用Notes.NotesUiWorkspace對象,但我會強烈建議讓它這樣,因爲如果您需要循環更多文檔,則很可能會導致Notes客戶端崩潰。

1

您正在使用基於Notes.NotesUIWorkspace的Notes「前端」類。這些是OLE類,這意味着他們需要Notes客戶端運行,並且他們在打開的文檔上工作。還有一些以Notes.NotesSession爲根的後端類。這些也是OLE類,所以它們仍然需要運行Notes客戶機,但是它們可以訪問其他文檔(以及其他數據庫,服務器等)。還有一組以Lotus.NotesSession爲根的後端類。請注意不同的前綴。這些都是COM類,因此它們不需要運行Notes客戶機 - 儘管它必須進行安裝和配置,並且您的代碼必須提供用戶的密碼,因爲客戶機不會提示它。

您可以找到NotesSession類h ere的文檔和示例。在靠近頁面底部的位置,您可以找到有關通過OLE或COM使用它們的信息的鏈接。您可以根據使用COM類here的一些示例找到一些示例,其中包括在數據庫視圖中遍歷文檔的示例。除了會議的初始設置之外,如果您使用OLE,則會一樣。