我需要在草稿中更改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
答案 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