1

先日取り組んでいたこととは別のアプローチを試みています。職場では、Outlook 2010 を使用しており、.XLSX 添付ファイルを含むメールを 1 日中受信しています。Outlook で VBA を使用して受信メールの添付ファイルをチェックする方法を見つけようとしています。添付ファイルの数が 0 を超える場合は添付ファイルをテストし、スプレッドシートの場合は送信者のアドレス帳情報でtblOutlookLogを更新します。これは、MS Access 以外で VBA を試して 2 日目か 3 日目で、構文を理解しようと暗闇の中で手探りしています。以下の Outlook から以下のコードを投稿しました。.Subject行のolInbox_ItemAdd(ByVal Item As Object)セクションで、". 拙いもので予めお許しください。助けや指示をありがとう。

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
4

1 に答える 1

3

オブジェクトのプレフィックスをアイテムに付ける必要があります。

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

などなど。ある段階で With を削除した可能性があると思います。

于 2012-02-27T22:53:00.710 に答える