在注释文档字段中添加文本时对象变量未设置问题
Object variable not set issue while adding text in to a notes document field
我确实创建了一个新表单,其中有一个 table 和 2 列。
这个table的最后一行是status
。
我想这样做:虽然我的 Notes Agent 是 运行,但它会经过几个操作步骤。如果其中一个步骤完成,它应该将此操作的结果添加到我定义的单元格中。
像这样:
----------------------------------------
| First action was done successfully. |
| Second action was done successfully. |
| Third action was done successfully. |
----------------------------------------
我尝试了以下代码:
Sub Initialize
Dim sess As NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim item As NotesItem
Set db = sess.CurrentDatabase
Set doc = db.GetDocumentById("100B")
'do some code stuff.....
Set item = doc.AppendItemValue( "field_Status", "First action was done successfully." & Chr(13) )
Call doc.Save( False, True )
'do some code stuff.....
Set item = doc.AppendItemValue( "field_Status", "Second action was done successfully." )
Call doc.Save( False, True )
End Sub
不幸的是,我总是收到这条消息:
Object variable not set
我不确定缺少什么以及这是否真的是如何在代码中实现我的想法的正确方法。我希望你对我有一个想法/提示。谢谢。
首先:永远不要在没有错误处理程序的情况下编写哪怕一行代码。
也就是说:最简单的错误处理程序是
On Error Goto ErrorHandler
...your complete code goes here
EndOfRoutine:
Exit Sub
ErrorHandler:
Messagebox Err & "," & Error & " in line " & Erl
Resume EndOfRoutine
这会给你这个错误行:
Set db = sess.CurrentDatabase
但是等等:哪个对象变量没有设置?
它是 "sess",因为你只写了:
Dim sess as NotesSession
已分配,但未设置...您需要:
Dim sess as New NotesSession
或者,如果你想保留你的线路,那么就在分配 db 之前:
Set sess = New NotesSession
附加建议:通过 NoteID 查找文档不是一个好主意,硬编码更糟:NoteId 在不同的副本中发生变化。同一文档在数据库的另一个副本(例如本地副本或集群)中将具有不同的 NoteId。如果有人删除该文档并重新创建它,那么您需要更新您的代码。使用排序视图和 GetDocumentByKey 以及您在文档或 Profile 文档中设置的特定键来存储此信息。或者至少使用 DocumentUniqueId,因为这在每个副本中都是相同的(尽管娱乐问题保持不变)
我确实创建了一个新表单,其中有一个 table 和 2 列。
这个table的最后一行是status
。
我想这样做:虽然我的 Notes Agent 是 运行,但它会经过几个操作步骤。如果其中一个步骤完成,它应该将此操作的结果添加到我定义的单元格中。
像这样:
----------------------------------------
| First action was done successfully. |
| Second action was done successfully. |
| Third action was done successfully. |
----------------------------------------
我尝试了以下代码:
Sub Initialize
Dim sess As NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim item As NotesItem
Set db = sess.CurrentDatabase
Set doc = db.GetDocumentById("100B")
'do some code stuff.....
Set item = doc.AppendItemValue( "field_Status", "First action was done successfully." & Chr(13) )
Call doc.Save( False, True )
'do some code stuff.....
Set item = doc.AppendItemValue( "field_Status", "Second action was done successfully." )
Call doc.Save( False, True )
End Sub
不幸的是,我总是收到这条消息:
Object variable not set
我不确定缺少什么以及这是否真的是如何在代码中实现我的想法的正确方法。我希望你对我有一个想法/提示。谢谢。
首先:永远不要在没有错误处理程序的情况下编写哪怕一行代码。 也就是说:最简单的错误处理程序是
On Error Goto ErrorHandler
...your complete code goes here
EndOfRoutine:
Exit Sub
ErrorHandler:
Messagebox Err & "," & Error & " in line " & Erl
Resume EndOfRoutine
这会给你这个错误行:
Set db = sess.CurrentDatabase
但是等等:哪个对象变量没有设置?
它是 "sess",因为你只写了:
Dim sess as NotesSession
已分配,但未设置...您需要:
Dim sess as New NotesSession
或者,如果你想保留你的线路,那么就在分配 db 之前:
Set sess = New NotesSession
附加建议:通过 NoteID 查找文档不是一个好主意,硬编码更糟:NoteId 在不同的副本中发生变化。同一文档在数据库的另一个副本(例如本地副本或集群)中将具有不同的 NoteId。如果有人删除该文档并重新创建它,那么您需要更新您的代码。使用排序视图和 GetDocumentByKey 以及您在文档或 Profile 文档中设置的特定键来存储此信息。或者至少使用 DocumentUniqueId,因为这在每个副本中都是相同的(尽管娱乐问题保持不变)