Lotus Notes获取邮件主题触发451运行时错误求助
我在从Lotus Notes中提取邮件主题时,反复碰到运行时错误:'451 Property let procedure not defined and property get procedure did not return an object'。先后尝试了GetFirstItem("subject")和ColumnValues(5)两种方式,都触发了相同错误。
方法一:GetFirstItem方式的问题与修复
以下是使用GetFirstItem方法的代码,此时NSubject.Values(0)已能正确捕获主题内容,但无法正常提取使用:
Sub Test_subject() Dim NSession As Object Dim NMailDb As Object Dim NFolder As Object Dim NView As Object Dim NDocument As Object Dim NSubject As Object Dim NItem As Variant Set NSession = CreateObject("Lotus.NotesSession") Call NSession.Initialize("password") Set NMailDb = NSession.GetDatabase("Server", "Directory") If Not NMailDb.IsOpen = True Then Call NMailDb.Open End If Set NFolder = NMailDb.GetView("($Inbox)") Set NView = NFolder.CreateViewNav() Set NDocument = NView.GetLastDocument Set NItem = NDocument.Document Set NSubject = NItem.GetFirstItem("subject") MsgBox (NSubject.Values(0)) End Sub
错误原因
代码中Set NItem = NDocument.Document是多余且错误的操作:NDocument本身就是NotesDocument对象,不存在Document属性,这导致NItem没有正确获取到有效的文档对象,后续调用GetFirstItem时触发451错误。即使临时能看到NSubject.Values(0)的内容,也是VBA后期绑定的异常表现,实际对象引用已经失效。
修复代码
直接使用NDocument调用GetFirstItem即可,修改后的核心代码片段:
Set NDocument = NView.GetLastDocument Set NSubject = NDocument.GetFirstItem("subject") MsgBox NSubject.Values(0)
方法二:ColumnValues方式的问题与修复
改用包含正确值的.ColumnValues(6)时同样触发错误,原代码片段:
Set NDocument = NView.GetLastDocument NItem = NDocument.ColumnValues(6)
错误原因
ColumnValues是NotesViewEntry对象的专属属性,并非NotesDocument对象的属性。你通过GetLastDocument获取的是NotesDocument实例,直接调用该属性会因属性不存在触发错误。
修复代码
需要先获取NotesViewEntry对象,再访问其ColumnValues属性,修改后的核心代码片段:
' 先定义NViewEntry变量 Dim NViewEntry As Object Set NViewEntry = NView.GetLastEntry If Not NViewEntry Is Nothing Then NItem = NViewEntry.ColumnValues(6) MsgBox NItem End If
内容的提问来源于stack exchange,提问作者Drawleeh

