如果有人能参与进来,我会非常感激的:)
我试图实现的是从outlook获取一封特定的电子邮件,其中包含当前日期和特定主题。在此之后,我想将电子邮件(表格)的内容复制到active excel工作表中。Im已经遍历了一个通用对象。
Sub Mail3()
Dim Folder As Outlook.MAPIFolder
Dim sFolders As Outlook.MAPIFolder
Dim MailBoxName As String, Pst_Folder_Name As String
Dim oMail As Object
Dim y As Long, x As Long
Dim olInsp As Outlook.Inspector
Dim wdDoc As Word.Document
Dim tb As Word.Table
Dim Myemail As String
Dim Atmt As Attachment
Dim irow As Integer
Dim oItem As Outlook.MailItem
Dim ns As Namespace
irow = 1
'set email date
Set ns = GetNamespace("MAPI")
Myemail = "abcd"
'Mailbox or PST Main Folder Name to set the name of the inbox - I have several mailboxes, needed to specify
MailBoxName = "myinbox"
'Mailbox Folder or PST Folder Name (As how it is displayed in your Outlook Session)
Pst_Folder_Name = "Inbox" 'Sample "Inbox" or "Sent Items"
'To direct to a Folder at a high level
Set Folder = Outlook.Session.Folders(MailBoxName).Folders(Pst_Folder_Name)
'copying the email contents into the refresh file
For Each oMail In Folder.Items
If oMail.Class = 43 Then
Set oMail = oItem
If oMail.Subject = Myemail And (Now() - oMail.ReceivedTime) < 1 Then
'oMail.SentOn = DateSerial(Year(Now), Month(Now), Day(Now)) Then
Application.ThisWorkbook.Worksheets("Sheet1").Range("B9").Value = oItem.HTMLBody
End If
End If
Next oMail
End Sub在我看来,我正在学习VBA,而这段代码并不完全是我创造的。
编辑:
好吧,所以我改变了很多东西。这一次使用oMail作为对象
仍然在这里获得一个未定义错误的对象Application.ThisWorkbook.Worksheets("Sheet1").Range("B9").Value = oItem.HTMLBody
发布于 2022-10-30 14:04:58
此序列将oMail设置为空。
For Each oMail In Folder.Items
If oMail.Class = 43 Then
Set oMail = oItem您可以以这种方式声明变量。
Dim oItem As Object
Dim oMail As Outlook.MailItem以任何您希望的方式测试oItem是一个邮件项。
Option Explicit
Sub Mail3_DifferentVariableNames()
Dim oFolder As Outlook.Folder
Dim MailBoxName As String
Dim High_Level_Folder_Name As String
Dim oItem As Object
Dim oMail As Outlook.MailItem
Dim mySubject As String
mySubject = "abcd"
MailBoxName = "myEmailAddress"
'Folder immediately under MailBoxName
High_Level_Folder_Name = "Inbox" 'Sample "Inbox" or "Sent Items"
Set oFolder = Session.Folders(MailBoxName).Folders(High_Level_Folder_Name)
'copying the email contents into the refresh file
For Each oItem In oFolder.Items
If oItem.Class = 43 Then
Set oMail = oItem
' If noticeably slow there are methods to reduce the number of items processed.
If oMail.Subject = mySubject And (Now() - oMail.ReceivedTime) < 1 Then
ThisWorkbook.Worksheets("Sheet1").Range("B9").Value = oMail.HTMLBody
End If
End If
Next
End Sub发布于 2022-10-29 23:37:29
仍然在这里获得一个未定义的对象错误
Application.ThisWorkbook.Worksheets("Sheet1").Range("B9").Value = oItem.HTMLBody您需要使用oMail对象来代替:
Application.ThisWorkbook.Worksheets("Sheet1").Range("B9").Value = oMail.HTMLBody此外,迭代文件夹中的所有项目并不是一个好主意。相反,可以使用Find/FindNext或Items类的Restrict方法,其中只能处理与定义的搜索条件相对应的项。在我为技术博客撰写的以下文章中,可以了解更多关于它们的内容:
最后,您可能还会发现使用日期时间比较筛选项。的文章很有帮助。
https://stackoverflow.com/questions/74229403
复制相似问题