两台机器都运行着64位版本的Windows 7。这个项目是痛苦地拼凑起来的,我不是一个程序员。
该项目的功能是,在设置为每晚触发的提醒时自动搜索电子邮件中的附件,并且仅将具有由两pos
行代码定义的字符串的附件下载到指定路径。基本上,它只是检查文件名是否包含所需的名称/短语。我正在处理的文件会随着每封电子邮件和多年来的变迁而略有变化,但始终包含一个语句。如果邮件是unRead
,它会将其标记为read
已完成,其中包含每封电子邮件中的所有附件。
唯一的区别是安装了 Outlook 2010 的机器上确实运行着其他一些代码。我把这段代码放到安装了 Outlook 2013 的机器上,看看是否发生冲突,但它仍然运行正常。
以下代码在装有 Outlook 2013 的机器上运行良好,但在装有 Outlook 2010 的机器上根本无法运行。该项目编译正常,但runs
不会下载任何文件,也不会将任何电子邮件标记为未读。
这是代码This Outlook Session
Private WithEvents MyReminders As Outlook.Reminders
Private Sub Application_Startup()
Set MyReminders = GetOutlookApp.Reminders
End Sub
Function GetOutlookApp() As Outlook.Application
' returns reference to native Application object
Set GetOutlookApp = Outlook.Application
End Function
Private Sub MyReminders_ReminderFire(ByVal ReminderObject As Reminder)
'On Error GoTo ErrorHandler
If ReminderObject.Caption = "Daily Report" Then
ReminderObject.Dismiss
Daily_Report
End If
If ReminderObject.Caption = "Shutdown Outlook" Then
ReminderObject.Dismiss
Application.Quit
End If
ProgramExit:
Exit Sub
ErrorHandler:
MsgBox Err.Number & " - " & Err.Description
Resume ProgramExit
End Sub
这是我在 上的代码Module1
,这只是因为另一台机器上已有代码。我知道它不必在模块中。
它在这里:
Sub Daily_Report()
' This Outlook macro checks a the Outlook Inbox for messages
' with attached files (of any type) and saves them to disk.
' NOTE: make sure the specified save folder exists before
' running the macro.
On Error GoTo GetAttachment_err
' Declare variables
Dim ns As NameSpace
Dim Inbox As MAPIFolder
Dim Item As Object
Dim Atmt As Attachment
Dim FileNameXLS As String
Dim FileNamePDF As String
Dim posXLS As Integer
Dim posPDF As Integer
Set ns = GetNamespace("MAPI")
Set Inbox = ns.GetDefaultFolder(olFolderInbox)
' Check each message for attachments
For Each Item In Inbox.Items
' Save any attachments found
If Item.UnRead = True Then
For Each Atmt In Item.Attachments
posXLS = InStr(Atmt.FileName, "FINAL EXCEL")
posPDF = InStr(Atmt.FileName, "Final PDF")
If posXLS <> 0 And (Right(Atmt.FileName, 4) = ".xls") Or posXLS <> 0 And (Right(Atmt.FileName, 5) = ".xlsx") Then
FileNameXLS = "C:\Users\ba\Downloads\Babcok Lab Reports\Babcock Excel\" & Atmt.FileName
Atmt.SaveAsFile FileNameXLS
End If
If posPDF <> 0 And (Right(Atmt.FileName, 4) = ".pdf") Then
FileNamePDF = "C:\Users\ba\Downloads\Babcok Lab Reports\Babcock PDF\" & Atmt.FileName
Atmt.SaveAsFile FileNamePDF
End If
Next Atmt
Item.UnRead = False
End If
Next Item
' Clear memory
GetAttachment_exit:
Set Atmt = Nothing
Set Item = Nothing
Set ns = Nothing
Exit Sub
' Handle errors
GetAttachment_err:
MsgBox "An unexpected error has occurred." _
& vbCrLf & "Please note and report the following information." _
& vbCrLf & "Macro Name: GetAttachments" _
& vbCrLf & "Error Number: " & Err.Number _
& vbCrLf & "Error Description: " & Err.Description _
, vbCritical, "Error!"
Resume Next
End Sub
答案1
所以,我终于搞明白了。当所有邮件都进入 Outlook 设置的 Gmail 帐户收件箱时,我的代码正在查看 Outlook 数据文件“收件箱”。一旦我通过收件箱“规则”将邮件重定向到“数据文件收件箱”,代码就可以完美运行。或者,我可能已经重定向我的代码以查看 Gmail 收件箱,但作为编程业余爱好者,我不知道如何轻松做到这一点。任何有关替代方案的建议都将不胜感激。