如何捕获列中的电子邮件主题行?

How to capture email subject lines in a column?

我有 Excel VBA 代码应该从我的 Lotus Notes 应用程序收件箱中获取主题行,然后将其复制到 Excel 中的一个列中。

好像是把主题填充到一个单元格里,然后覆盖了。

第二个问题是,循环进行到一半时出现错误

Type:mismatch

Sub Subject_Info()

Dim v As Object
Dim vn As Object
Dim e As Object
Dim doc As Object
Dim rtitem As Variant
Dim nit As Object

View = "$All"

Set NSession = CreateObject("Notes.NotesSession")
Set NMailDb = NSession.GetDatabase("", "")
If Not NMailDb.IsOpen Then
    NMailDb.OPENMAIL
End If
    
Set v = NMailDb.GetView(View)
Set vn = v.CreateViewNav()

Set e = vn.GetFirstDocument()

Do While Not (e Is Nothing)
    Set doc = e.Document
    Set nit = doc.GetFirstItem("subject")
    Lines = Split(nit.Text, vbCrLf)
    Range("A:A").Resize(UBound(Lines) + 1, 1).Value = Application.WorksheetFunction.Transpose(Lines)
    Set e = vn.GetNextDocument(e)
Loop

End Sub

背景:在 Notes 中,文档中的所有项目都没有固定的格式。一份文件可能包含“主题”项,而另一份文件不包含……但两份文件仍然完全有效。与关系数据库相比,这在基于文档的数据库中是正常的。

在您的情况下,对于不包含主题项的文档,您的代码行 Set nit = doc.GetFirstItem("subject") 将 return Nothing。然后下一行也将失败,因此您的“Lines”变量中没有有效数组。

您可以将代码包装在 If doc.HasItem("Subject") then 子句中。但这使它不必要地复杂化,因为已经有一种更适合的方法。

简单替换

 Set nit = doc.GetFirstItem("subject")
 Lines = Split(nit.Text, vbCrLf)

 Lines = doc.GetItemValue("subject")

GetItemValue 始终 return 是一个数组,与项目的存在无关。如果没有项目,那么它 return 是一个包含一个空字符串元素的数组。

这应该可以解决您的“类型:不匹配”错误。