【问题标题】:How to capture email subject lines in a column?如何捕获列中的电子邮件主题行?
【发布时间】:2021-11-02 19:39:40
【问题描述】:

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

似乎将主题填充到单个单元格中并覆盖它。

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

类型:不匹配

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

【问题讨论】:

  • 请尝试Range("A1").Resize(UBound(Lines) + 1, 1).Value 而不是Range("A:A").Resize(UBound(Lines) + 1, 1).Value。您不能调整整列的大小。但看起来您希望添加到最后一个空行,并且应该事先确定这一行。类似:Dim lastRow As Long,然后是lastRow = Range("A" & rows.count).End(xlUp).row。然后Range("A" & lastRow).Resize(UBound(Lines) + 1, 1).Value = ...lastRow必须在每次迭代后计算...

标签: excel vba email lotus-notes subject


【解决方案1】:

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

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

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

简单替换

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

 Lines = doc.GetItemValue("subject")

GetItemValue 总是返回一个数组,与是否存在项目无关。如果没有项目,则返回一个包含一个空字符串元素的数组。

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

【讨论】:

    猜你喜欢
    • 2017-09-18
    • 1970-01-01
    • 2018-04-29
    • 2013-08-11
    • 2011-10-14
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多