Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA Outlook运行时错误';438';:对象没有';不支持此属性或方法_Vba_Outlook - Fatal编程技术网

VBA Outlook运行时错误';438';:对象没有';不支持此属性或方法

VBA Outlook运行时错误';438';:对象没有';不支持此属性或方法,vba,outlook,Vba,Outlook,我正在尝试运行此to宏,将电子邮件附件从收件箱中的文件夹(称为toolkit downloads)移动到桌面上的文件夹中,并重命名该附件 我明白了 运行时错误“438”:对象不支持此属性或方法 首先,如果在Outlook中运行VBA宏,则无需创建新的Outlook应用程序实例: Set oOutlook = New Outlook.Application 相反,请使用defualt模块中可用的应用程序属性 Attachment类的方法接受一个字符串,该字符串表示保存附件的位置。确保传递了一个字

我正在尝试运行此to宏,将电子邮件附件从收件箱中的文件夹(称为toolkit downloads)移动到桌面上的文件夹中,并重命名该附件

我明白了

运行时错误“438”:对象不支持此属性或方法


首先,如果在Outlook中运行VBA宏,则无需创建新的Outlook应用程序实例:

Set oOutlook = New Outlook.Application
相反,请使用defualt模块中可用的
应用程序
属性

Attachment
类的方法接受一个字符串,该字符串表示保存附件的位置。确保传递了一个字符串


一般来说,我建议逐行调试代码,并找出哪个属性或方法确切地生成错误。你可能会发现这篇文章很有帮助

首先,如果在Outlook中运行VBA宏,则无需创建新的Outlook应用程序实例:

Set oOutlook = New Outlook.Application
相反,请使用defualt模块中可用的
应用程序
属性

Attachment
类的方法接受一个字符串,该字符串表示保存附件的位置。确保传递了一个字符串


一般来说,我建议逐行调试代码,并找出哪个属性或方法确切地生成错误。你可能会发现这篇文章很有帮助

您试图在方法
SaveAsFile
中将MailItem对象用作字符串,因此出现错误

我猜您希望在新文件名中包含邮件的主题:

.Item(Ictr).SaveAsFile sPathName _
    & .Item(Ictr).Parent.Subject
如果您有多个附件,我会在其中添加初始文件名:

.Item(Ictr).SaveAsFile sPathName _
    & .Item(Ictr).Parent.Subject
    & .Item(Ictr).FileName

完整代码:

Sub OSP()

Dim oOutlook As Outlook.Application
Dim oNs As Outlook.NameSpace 'Main Outlook Today
Dim oFldrSb As Outlook.MAPIFolder 'Sub Folder in Outlook Today
Dim oFldrSbSb As Outlook.MAPIFolder 'Sub in Sub Folder
Dim oFldrSbSbsb As Outlook.MAPIFolder 'Sub in Sub in Sub Folder

Dim oMessage As Object
Dim sPathName As String
Dim oAttachment As Outlook.Attachment
Dim Ictr As Integer
Dim iAttachCnt As Integer

sPathName = "H:\Desktop\Toolkit Downloads\" 'My Folder Path where to save attachments

Set oOutlook = Application
Set oNs = oOutlook.GetNamespace("MAPI")
Set oFldrSb = oNs.Folders("Joe.Bloggs@test.co.uk")
Set oFldrSbSb = oFldrSb.Folders("Inbox")
Set oFldrSbSbsb = oFldrSbSb.Folders("Toolkit Downloads")

For Each oMessage In oFldrSbSbsb.items

    With oMessage.Attachments
        iAttachCnt = .Count

        If iAttachCnt > 0 Then
            For Ictr = 1 To iAttachCnt
                .Item(Ictr).SaveAsFile sPathName _
                & .Item(Ictr).Parent.Subject
                & .Item(Ictr).FileName
            Next Ictr
        End If
    End With

DoEvents

Next oMessage

SaveAttachments = True

MsgBox "All Indepol Download files have been moved !!" & vbCrLf & vbCrLf & "It worked... Yahoo"

End Sub

您试图在方法
SaveAsFile
中将MailItem对象用作字符串,因此出现错误

我猜您希望在新文件名中包含邮件的主题:

.Item(Ictr).SaveAsFile sPathName _
    & .Item(Ictr).Parent.Subject
如果您有多个附件,我会在其中添加初始文件名:

.Item(Ictr).SaveAsFile sPathName _
    & .Item(Ictr).Parent.Subject
    & .Item(Ictr).FileName

完整代码:

Sub OSP()

Dim oOutlook As Outlook.Application
Dim oNs As Outlook.NameSpace 'Main Outlook Today
Dim oFldrSb As Outlook.MAPIFolder 'Sub Folder in Outlook Today
Dim oFldrSbSb As Outlook.MAPIFolder 'Sub in Sub Folder
Dim oFldrSbSbsb As Outlook.MAPIFolder 'Sub in Sub in Sub Folder

Dim oMessage As Object
Dim sPathName As String
Dim oAttachment As Outlook.Attachment
Dim Ictr As Integer
Dim iAttachCnt As Integer

sPathName = "H:\Desktop\Toolkit Downloads\" 'My Folder Path where to save attachments

Set oOutlook = Application
Set oNs = oOutlook.GetNamespace("MAPI")
Set oFldrSb = oNs.Folders("Joe.Bloggs@test.co.uk")
Set oFldrSbSb = oFldrSb.Folders("Inbox")
Set oFldrSbSbsb = oFldrSbSb.Folders("Toolkit Downloads")

For Each oMessage In oFldrSbSbsb.items

    With oMessage.Attachments
        iAttachCnt = .Count

        If iAttachCnt > 0 Then
            For Ictr = 1 To iAttachCnt
                .Item(Ictr).SaveAsFile sPathName _
                & .Item(Ictr).Parent.Subject
                & .Item(Ictr).FileName
            Next Ictr
        End If
    End With

DoEvents

Next oMessage

SaveAttachments = True

MsgBox "All Indepol Download files have been moved !!" & vbCrLf & vbCrLf & "It worked... Yahoo"

End Sub

哪条语句给出了错误438?文件夹(“工具包下载”)中是否有非邮件项的内容?只有邮件项目才有附件。为什么要将.
项目(Ictr).Parent
作为输出文件名的一部分?我从未尝试过,但我猜附件的父项是MailItem。MailItem不是字符串,因此不能以这种方式使用。你不能保证像这样的名字在没有测试的情况下是唯一的。你好,托尼,非常感谢你的回复。我必须承认,我是VBA的新手,并且得到了使用的脚本,所以我不确定为什么要使用Item(Ictr)。Parent。错误438似乎没有突出显示语句。我可以确认Toolkit Downloads文件夹中有很多带有附件的电子邮件。Hiya Tony刚刚发现了错误,它似乎位于.Item(Ictr).SaveAsFile sPathName&.Item(Ictr).parents哪条语句给出了错误438?文件夹(“Toolkit Downloads”)中是否有非邮件项的内容?只有邮件项目才有附件。为什么要将.
项目(Ictr).Parent
作为输出文件名的一部分?我从未尝试过,但我猜附件的父项是MailItem。MailItem不是字符串,因此不能以这种方式使用。你不能保证像这样的名字在没有测试的情况下是唯一的。你好,托尼,非常感谢你的回复。我必须承认,我是VBA的新手,并且得到了使用的脚本,所以我不确定为什么要使用Item(Ictr)。Parent。错误438似乎没有突出显示语句。我可以确认Toolkit Downloads文件夹中有很多带有附件的电子邮件。Hiya Tony刚刚发现了错误,它似乎位于.Item(Ictr).SaveAsFile sPathName&.Item(Ictr)。ParentMany感谢Eugene我将看一看这篇文章。调试突出显示.Item(Ictr).SaveAsFile sPathName&.Item(Ictr).ParentMany感谢Eugene我将看一看这篇文章。调试突出显示.Item(Ictr).SaveAsFile sPathName&.Item(Ictr).parents感谢R3uK的帮助我将尝试运行它感谢R3uK的帮助我将尝试运行它