0

約 1 週間取り組んできたこの同じプロジェクトで、私はまだ困惑しています。私は VBA を解決したと思いますが、VBA を Access であまり使用したことがありません。これは、Outlook 2010 で手順を作成しようとする最初の試みです。最終的な目標は、受信メールをチェックして、添付ファイルがあるかどうかを確認することです。添付ファイルがある場合は、ファイルの種類が .xlsx かどうかを確認してください。添付ファイルがスプレッドシートの場合、 MSOutlook.ACCDBという Access DB のtblOutlookLogというテーブルに送信者の電子メール アドレスを書き込みたいと思います。. 機会があればいつでも、このコードを調べて、私が何を間違っているのか、または私が達成しようとしていることに対応するためのより効率的な方法があるかどうかを教えていただけますか? Outlook が開くたびに、Set db = OpenDatabase(strdbPath & strdbName)という行を強調表示するエラーが表示され、認識されないデータベース形式というエラーが表示されます。もう一度ありがとう!

  Option Explicit

Private WithEvents InboxItems As Outlook.Items
    Dim olns As Outlook.NameSpace
    Dim olInbox As Outlook.MAPIFolder
    Dim olItem As Object
    Dim olAtmt As Outlook.Attachment
    Dim db As Database
    Dim rst As 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)
    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 rec As Recipient
    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
                If Item.Class = olMail Then
                    Set olItem = Item
                    With olItem
                            rst.AddNew
                            rst!Subject = Left(olItem.Subject, 255)
                            rst!Sender = olItem.Sender
                            rst!FromAddress = olItem.SenderEmailAddress
                            rst!Status = "Inbox"
                            rst!Logged = olItem.ReceivedTime
                            rst!AttachmentPath = strFilename
                            For Each rec In olItem.Recipients
                                rst!To = rst!To & rec.Name & " : " & rec.Address & ";"
                            Next
                            rst.Update
                    End With
                End If
            End If
        End If

         Next olAtmt
         Next olItem

        Set olAtmt = Nothing
        Set olItem = Nothing
    End Sub
4

1 に答える 1

0

こんにちは、必要なのはこれらの余分な行だと思います

DAO.Workspace として薄暗い wks

wks = ワークスペース (0) を設定します。

次に、次の行を変更します

db = OpenDatabase(strdbPath & strdbName) を設定します。

Set db = wks .OpenDatabase(strdbPath & strdbName)

これは、「DAOオブジェクトモデル」と呼ばれる犬の耳の本を見つけたものに基づいています。これは以前に使用したコードであると確信していますが、それらを使用したプロジェクトを見つける時間がありません.

また、http: //www.helenfeddema.com/CodeSamples.htm も参照してください。Helen は Access と DAO をよく知っており、リモート アクセス DB に接続するために少し異なる方法を使用していますが、一見の価値があります。

于 2012-02-28T22:11:29.383 に答える