MS Outlook更改所有草稿的主题行

时间:2018-03-01 15:35:50

标签: vba outlook outlook-vba

我需要在草稿中更改1000个电子邮件的主题行。

这是我正在使用的代码,但它并没有改变主题。有人可以让我知道我错过了什么。

Sub Drafts_Send()

Dim objDrafts As Outlook.Items
Dim objDraft As Object
Dim strPrompt As String
Dim nResponse As Integer
Dim i As Long

Set objDrafts = Outlook.Application.Session.GetDefaultFolder(olFolderDrafts).Items

For i = objDrafts.Count To 1 Step -1
    If objDrafts.Item(i).Subject = "Please Thank You" Then
        objDrafts.Item(i).Subject = "Please & Thank You"
        objDrafts.Item(i).Save
    End If
Next i

Set objDrafts = Nothing

End Sub

2 个答案:

答案 0 :(得分:0)

我的猜测是,默认的“草稿”文件夹不是包含您要更新的草稿的文件夹。

运行此宏:

Sub DsplStoreContainingfDefaultDrafts()

  Dim NS As Outlook.NameSpace
  Dim DefaultInboxFldr As MAPIFolder

  Set NS = CreateObject("Outlook.Application").GetNamespace("MAPI")
  Set DefaultInboxFldr = NS.GetDefaultFolder(olFolderDrafts)

  Debug.Print "Default Drafts folder in """ & DefaultInboxFldr.Parent.Name & """"

End Sub

在我的系统上输出:

Default Drafts folder in "Outlook Data File"

“Outlook数据文件”是安装附带的默认存储,但它仅用于与电子邮件帐户无关的信息。 Outlook为我的每个电子邮件帐户创建了一个单独的商店,其名称为JohnSmith@AcmeIsp.com和JohnSmith@gmail.com。每个商店都有自己的草稿文件夹,草稿在我将发送电子邮件的帐户的草稿文件夹中。

转到包含您要更新的草稿的文件夹。它是在我的宏标识的商店内吗?如果不继续阅读。

复杂的是,在我的系统上,Drafts是我常规ISP帐户的商店中的顶级文件夹,但是我的Gmail帐户的文件夹中的第二级文件夹。

您需要替换:

Set objDrafts = Outlook.Application.Session.GetDefaultFolder(olFolderDrafts).Items

Outlook.Application.是多余的,因为您在Outlook中运行它。

如果您的商店与我的常规ISP帐户相同,则需要以下内容:

Set objDrafts = Session.Folders("JohnSmith@AcmeIsp.com").Folders("Drafts").Items

如果您的商店与我的Gmail帐户相似,则需要以下内容:

Set objDrafts = Session.Folders("JohnSmith@gmail.com").Folders("[Gmail]").Folders("Drafts").Items

答案 1 :(得分:0)

您可以尝试一些技巧。
.DoEvents.GetInspector以及不得已.Display

Sub Drafts_Send()

Dim objDrafts As Items
Dim objDraft As Object
Dim i As Long

Set objDrafts = Session.GetDefaultFolder(olFolderDrafts).Items

For i = objDrafts.Count To 1 Step -1

    If objDrafts.Item(i).Class = olMail Then
    
        Set objDraft = objDrafts.Item(i)
        
        With objDraft
         
            If .Subject = "Please Thank You" Then
    
                ' this has some .Display behaviour, without displaying
                .GetInspector
                '.Display ' as a last resort
        
                objDrafts.Item(i).Subject = "Please & Thank You"
                
                DoEvents
                
                ' if in Draft folder reading pane should be off
                .Save
            
            End If
            
        End With
        
        Set objDraft = Nothing
        
    End If
Next

Set objDrafts = Nothing

End Sub