2012-02-27 51 views
1

我正在嘗試不同的方法來處理前一天的工作。在工作中,我們使用Outlook 2010並全天接收帶有.XLSX附件的電子郵件。我試圖弄清楚如何在Outlook中使用VBA來檢查傳入附件的電子郵件,然後如果附件計數大於0,則測試附件,如果它是電子表格,則使用發件人地址簿信息更新tblOutlookLog。這只是我第二天或第三天在MS Access之外嘗試使用VBA,我在摸索語法的黑暗中摸索着。我已經從下面的Outlook中發佈了以下代碼。我在olInbox_ItemAdd(ByVal Item As Object)部分出現錯誤。主體行,指出這是一個「無效或不合格的參考」。我馬上提前道歉。感謝您的幫助或指導。Outlook 2010 VBA無效或不合格參考

Option Explicit 

Private WithEvents InboxItems As Outlook.Items 
    Dim olns As NameSpace 
    Dim olInbox As MAPIFolder 
    Dim olItem As Object 
    Dim olAtmt As Attachment 
    Dim db As DAO.Database 
    Dim rst As DAO.Recordset 

    Const strdbPath = "\\FMI-FS\Users\sharp-c\Desktop\" 
    Const strdbName = "MSOutlook.accdb" 
    Const strTableName = "tblOutlookLog" 

Private Sub Application_Startup() 
    Set olns = GetNamespace("MAPI") 
    Set olInbox = olns.GetDefaultFolder(olFolderInbox).Items 
    Set db = OpenDatabase(strdbPath & strdbName) 
    Set rst = db.OpenRecordset(strTableName, dbOpenDynaset) 
End Sub 

Private Sub Application_Quit() 
    On Error Resume Next 
    rst.Close 
    db.Close 
    Set olns = Nothing 
End Sub 


Private Sub olInbox_ItemAdd(ByVal Item As Object) 
    Dim olItem As Outlook.MailItem 
    Dim olAtmt As Outlook.Attachment 
    Dim strFoldername As String 
    Dim strFilename As String 
    Dim i As Integer 
    i = 0 

    For Each olItem In olInbox.Items 
     For Each olAtmt In olItem.Attachments 
     If olItem.olAtmt.Count > 0 Then 
      If Right$(olAtmt.FileName, 5) = ".xlsx" Then 
       strFilename = "\\FMI-FS\Users\sharp-c\Desktop\Test" & olAtmt.FileName 
       olAtmt.SaveAsFile strFilename 
       i = i + 1 
        rst.AddNew 
        rst!Subject = Left(.Subject, 255) 
        rst!Sender = .Sender 
        rst!FromAddress = .SenderEmailAddress 
        rst!Status = "Inbox" 
        rst!Logged = .ReceivedTime 
        rst!AttachmentPath = strFilename 
        Next 
        rst.Update 
      End If 

     Next olAtmt 
     Next olItem 

     Set olAtmt = Nothing 
     Set olItem = Nothing 
End Sub 

回答

3

您需要與對象前綴項目:

rst!Subject = Left(olItem.Subject, 255) 

等等。我想你可能已經在某個階段刪除了。

+0

Remou,我添加了項目前綴,並在後面消除了我在本文中收到的錯誤。對於我的信息,在我的帖子解決的問題已解決後,在SO上,我們是否會創建一個涵蓋新主題的新帖子,還是繼續使用現有帖子?我很抱歉,我是新手! – CSharp821 2012-02-28 15:24:20

+0

一般而言,如果帖子的原因相同,在這種情況下,代碼不會運行,您仍將繼續使用相同的帖子。 – Fionnuala 2012-02-28 15:31:14

+0

這很有道理,對此感到抱歉。 – CSharp821 2012-02-28 15:35:00