Проект VBA отлично работает на машине с Outlook 2013, но не на машине с Outlook 2010

0

Обе машины работают под управлением 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
Dlockhart104
источник
Если вы запускаете VBA в Outlook 2010 без конфликтующего кода, он работает нормально? Тогда нужно решить конфликт ... Я сам использую этот код для сохранения вложений:Public Sub saveAttachtoDisk(itm As Outlook.MailItem) Dim objAtt As Outlook.Attachment Dim saveFolder As String saveFolder = "c:\temp" For Each objAtt In itm.Attachments objAtt.SaveAsFile saveFolder & "\" & objAtt.DisplayName Set objAtt = Nothing Next End Sub
Sun
Когда я запускаю VBA на Outlook 2010, нет никаких ошибок или проблем вообще. Ничего не произошло. Даже когда я удаляю весь другой код, ничего не происходит. Он работает как мечта на outlook 2014. Напоминание срабатывает, и оно делает свое дело. Спасибо за ответ. Я попробую ваш код сегодня вечером.
Dlockhart104
Просто выяснил, что мой код не видит никаких элементов в папке входящих, хотя у меня есть два непрочитанных элемента в папке входящих. Я понятия не имею, почему ...... продолжить поиск. Кроме того, я попробовал ваш код и продолжал получать ошибку во время выполнения «91». Я пытался заставить его работать, но не знаю VBA достаточно хорошо, чтобы создавать объекты с нуля. возможно, когда я закончу с этим проектом, я узнаю об этом.
Dlockhart104
StackExchange также имеет функции просмотра кода и стекопотока, у которых есть более компетентные лица для просмотра сценариев VBA или для того, чтобы помочь вам переписать частично работающий код. Просто объясните, что вы уже пробовали, и объясните, каких результатов вы хотите. Я пометил ваш вопрос для StackOverflow ... возможно, один из модераторов перенесет его туда.
вс
Спасибо, я тоже там разместил. Пока не видел большой помощи.
Dlockhart104

Ответы:

0

Итак, я наконец понял это. Мой код просматривал файл данных Outlook «Входящие», когда вся почта входила в папку «Входящие» учетной записи gmail, с которой был настроен внешний вид. Как только я перенаправил почту в «Data File Inbox» через правило «Входящие», код работал прекрасно. В качестве альтернативы я, возможно, мог бы перенаправить свой код для просмотра в папке входящих сообщений gmail, но не знал, как легко сделать это, будучи любителем в программировании. Любые предложения для альтернативы будут оценены.

Dlockhart104
источник