Question

J'essaye une approche différente de quelque chose sur lequel je travaillais l'autre jour. Au travail, nous utilisons Outlook 2010 et recevons des e-mails avec des pièces jointes .xlsx tout au long de la journée. J'essaie de comprendre comment utiliser VBA dans Outlook pour vérifier les e-mails entrants pour les pièces jointes, alors si le nombre de pièces jointes est> 0, testez la pièce jointe et s'il s'agit d'une feuille de calcul, mise à jour tboutlooklog avec les informations sur les expéditeurs du carnet d'adresses. Ce n'est que mon 2ème ou troisième jour expérimentant avec VBA en dehors de l'accès MS et je suis en train de tâtonner dans l'obscurité en essayant de comprendre la syntaxe. J'ai publié le code ci-dessous sur Outlook ci-dessous. J'obtiens une erreur dans le olinbox_itemadd (élément byval comme objet) Section à la .Matière ligne indiquant que c'est un "référence non valide ou non qualifiée". Je m'excuse à l'avance dans son bâclé. Merci pour toute aide ou direction.

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
Était-ce utile?

La solution

Vous devez préfixer les éléments avec l'objet:

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

Et ainsi de suite. Je pense que vous avez peut-être supprimé à un moment donné.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top