โครงการ VBA ทำงานได้ดีบนเครื่องกับ Outlook 2013 แต่ไม่ได้อยู่ในเครื่องที่ใช้ Outlook 2010


0

เครื่องทั้งสองเครื่องใช้งาน Windows 7 เวอร์ชัน 64 บิตโครงการนี้ได้รับการรวมเข้าด้วยกันอย่างเจ็บปวดฉันไม่ใช่โปรแกรมเมอร์

ฟังก์ชั่นของโครงการคือค้นหาอีเมลสำหรับสิ่งที่แนบมาโดยอัตโนมัติเมื่อมีการเตือนให้ตั้งไฟทุกคืนและดาวน์โหลดไฟล์แนบไปยังเส้นทางที่ระบุที่มีสตริงที่กำหนดโดย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

หากคุณเรียกใช้ 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 มีข้อผิดพลาดหรือปัญหาใด ๆ เลย ไม่มีอะไรเกิดขึ้น. แม้ว่าฉันจะลบรหัสอื่นทั้งหมดไม่มีอะไรเกิดขึ้น มันทำงานเหมือนฝันในมุมมอง 2014 เตือนความทรงจำไฟและมันทำสิ่งที่มัน ขอบคุณสำหรับการตอบกลับ. ฉันจะลองโค้ดของคุณในคืนนี้
Dlockhart104

เพิ่งทราบว่ารหัสของฉันไม่เห็นรายการใด ๆ ในกล่องจดหมายถึงแม้ว่าฉันมีรายการที่ยังไม่ได้อ่านสองรายการในกล่องจดหมาย ฉันไม่รู้ว่าทำไม ...... ค้นหาต่อไป นอกจากนี้ฉันลองใช้รหัสของคุณและได้รับข้อผิดพลาดรันไทม์ '91' ฉันพยายามทำให้มันใช้งานได้ แต่ไม่รู้จัก VBA ดีพอที่จะสร้างวัตถุตั้งแต่เริ่มต้น บางทีเมื่อฉันทำกับโครงการนี้ฉันจะรู้ว่า
Dlockhart104

StackExchange ยังมี codereview และ stackoverflow ซึ่งมีบุคคลที่มีความสามารถมากขึ้นสำหรับการตรวจสอบสคริปต์ VBA หรือเพื่อช่วยคุณเขียนรหัสการทำงานบางส่วนอีกครั้ง เพียงให้แน่ใจว่าคุณอธิบายสิ่งที่คุณได้ลองไปแล้วและอธิบายผลลัพธ์ที่คุณต้องการ ฉันตั้งค่าสถานะคำถามของคุณสำหรับ StackOverflow ... อาจเป็นหนึ่งในผู้ดำเนินรายการจะย้ายไปที่นั่น
Sun

ขอบคุณฉันโพสต์ไว้ที่นั่นเช่นกัน ยังไม่เห็นความช่วยเหลือมากนัก
Dlockhart104

คำตอบ:


0

ดังนั้นในที่สุดฉันก็คิดออก รหัสของฉันดูแฟ้มข้อมูล "กล่องจดหมาย" ของ Outlook เมื่อจดหมายทั้งหมดเข้าสู่บัญชี Gmail กล่องขาเข้าที่มีการตั้งค่าด้วย Outlook เมื่อฉันเปลี่ยนเส้นทางจดหมายไปที่ "Data File Inbox" ผ่านกล่องจดหมาย "กฎ" รหัสทำงานได้อย่างสวยงาม อีกทางหนึ่งฉันอาจเปลี่ยนเส้นทางรหัสของฉันเพื่อดูในกล่องจดหมาย gmail แต่ไม่รู้ว่าจะทำเช่นนี้ได้อย่างไรในฐานะที่เป็นนักสมัครเล่นในการเขียนโปรแกรม ข้อเสนอแนะสำหรับทางเลือกจะได้รับการชื่นชม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.