1

我在“邮件到达之前”运行 Lotusscript 代理。我需要它来抓取“#”符号之后的主题行中的文本。无论我如何尝试获取主题字段(Evaluate、getFirstItem、getItemValue 等),我总是以错误告终。通常是类型不匹配或未设置对象变量。

下面的代码是我当前的代码,并在第 14 行“类型不匹配”上返回错误 13

Option Public
Option Declare

Sub Initialize
    On Error GoTo ErrorHandler 
    Dim s As New NotesSession
    Dim db As NotesDatabase
    Dim view As NotesDocumentCollection
    Dim doc As NotesDocument
    Dim nextdoc As NotesDocument
    Dim result As String
    Set db = s.CurrentDatabase
    Set view = db.Unprocesseddocuments
    If Not view Is Nothing Then
        Set doc = view.Getfirstdocument()
        While Not doc Is Nothing
            result = Evaluate ("@Right(Subject;""#"")", doc)
            Print result
            Set nextDoc = view.GetNextDocument(doc)
            Call doc.Remove(True)
            Set doc = nextDoc
        Wend
    End If
    Print "End"
Done: 
    Exit Sub
ErrorHandler: 
    Select Case Err 
        Case Else 
            Print "Error " & CStr(Err) & " in agent on line " & CStr(Erl) & ": " & Error 
            Resume Done 
    End Select 
End Sub 
4

2 回答 2

4

在新邮件到达之前不返回 NotesDocumentCollection。利用...

Sub Initialize
    Dim Session As New NotesSession
    Dim Doc As NotesDocument
    Dim result As String
    Set Doc = Session.DocumentContext
    Let result = StrRight(Doc.Subject(0), "#")
End Sub

而不是未处理的文档...

于 2012-03-09T15:16:22.063 回答
3

关于Type Mismatch使用 Evaluate 时的原始问题,请注意“使用 Evaluate 语句”下的 Designer 帮助:

" returnValue是一个数组,其中元素的类型和数量反映了公式结果;标量值返回到数组的元素 0。您应该使用变体作为返回值,因为您可能不知道有多少元素回来。”

因此,请尝试以下更改:

    ...
    Dim result As Variant
    ...
    result = Evaluate (|@Right(Subject;"#")|, doc)
    ' Treat result as an array
    Print result(0)
    ...
于 2012-03-11T22:25:23.920 回答