首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型错配错误-尝试编写从电子邮件中提取表并复制到excel的子程序。

类型错配错误-尝试编写从电子邮件中提取表并复制到excel的子程序。
EN

Stack Overflow用户
提问于 2022-10-28 00:01:29
回答 2查看 67关注 0票数 0

如果有人能参与进来,我会非常感激的:)

我试图实现的是从outlook获取一封特定的电子邮件,其中包含当前日期和特定主题。在此之后,我想将电子邮件(表格)的内容复制到active excel工作表中。Im已经遍历了一个通用对象。

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-30 14:04:58

此序列将oMail设置为空。

代码语言:javascript
复制
For Each oMail In Folder.Items
    If oMail.Class = 43 Then
        Set oMail = oItem

您可以以这种方式声明变量。

代码语言:javascript
复制
Dim oItem As Object
Dim oMail As Outlook.MailItem

以任何您希望的方式测试oItem是一个邮件项。

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2022-10-29 23:37:29

仍然在这里获得一个未定义的对象错误

代码语言:javascript
复制
Application.ThisWorkbook.Worksheets("Sheet1").Range("B9").Value = oItem.HTMLBody

您需要使用oMail对象来代替:

代码语言:javascript
复制
Application.ThisWorkbook.Worksheets("Sheet1").Range("B9").Value = oMail.HTMLBody

此外,迭代文件夹中的所有项目并不是一个好主意。相反,可以使用Find/FindNextItems类的Restrict方法,其中只能处理与定义的搜索条件相对应的项。在我为技术博客撰写的以下文章中,可以了解更多关于它们的内容:

最后,您可能还会发现使用日期时间比较筛选项。的文章很有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74229403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档