【发布时间】:2021-11-04 23:07:48
【问题描述】:
我们在 A 列和 B 列中手动输入信息,工作表用于比较主题行。
我们收到带有特定主题的电子邮件,这些主题与 B 列中的数据相匹配。这些电子邮件还具有为 A 列中的电子邮件地址指定的附件。通常我们所做的是检查电子邮件的主题,找到与 B 列中包含相同主题信息的行,然后将该电子邮件转发到 A 列中同一行的电子邮件。
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
Lines = doc.GetItemValue("subject")
Range("C1").Resize(UBound(Lines) + 1, 1).Value = Application.WorksheetFunction.Transpose(Lines)
Set e = vn.GetNextDocument(e)
Loop
End Sub
此代码查看我的 Lotus Notes 收件箱,(我需要打开收件箱才能使其工作,但这没关系)它获取我收件箱中每封电子邮件的主题行并将其输入到 C1。然后它对下一封电子邮件再次执行此操作并覆盖 C1,此循环直到它每次遍历所有覆盖 C1 的电子邮件。
Public Sub SubstringCheck()
Dim i As Long, icount As Integer
Dim lastrow As Long
Dim MainString As String
Dim SubString As Variant
lastrow = ActiveSheet.Range("A30000").End(xlUp).Row
For i = 1 To lastrow
MainString = Range("C1")
SubString = Range("B" & i)
If InStr(1, LCase(MainString), LCase(SubString), vbTextCompare) <> 0 Then
Forward_Email MainString, Range("A" & i)
icount = icount + 1
ElseIf InStr(LCase(MainString), LCase(SubString)) = 0 Then
End If
Next i
End Sub
此代码获取 C1 中的任何内容,并将其与 B 列中的每个条目进行比较。当它找到 C1 与 B 列中的任何值之间的匹配时,它然后运行 Forward_Email 函数,该函数返回到带有主题的 Lotus Notes C1 中的行,按主题行查找该电子邮件,并使用匹配行的电子邮件地址形式将其转发。
我的问题是,我想获取我的代码 (Substring_Check) 并在使用主题行填充 C1 的代码中运行它。我想让它在下一个循环覆盖 C1 之前运行,这样 Substring_Check 可以检查 C1 中的信息和 B 列中的信息,如果有匹配,它将转发电子邮件,如果没有,则循环可以覆盖中的信息C1 并重复。实现这种合并的最佳方式是什么?
【问题讨论】:
-
我从哪里开始...您的代码有很多问题,我不知道您想要实现什么...您表中的 B 列来自哪里?您是否知道您为每封邮件一次又一次地覆盖 C1?因为这完全不清楚,我投票决定关闭....对不起。
-
你说得对,让我尝试改进它@TorstenLink
-
您需要打开收件箱的原因是您使用的是 Notes.NoteSession 而不是 Lotus.NotesSession。
-
就您最后一个问题的答案而言,我认为您只需要在执行 Range("C1") 分配之后但在执行 set e 分配之前调用 Substring_Check() 即可。如果我正确理解了您的问题,那就是这样,但这似乎太简单了,无法成为您真正要问的问题。
标签: excel vba email lotus-notes