Option Explicit
'variabili per la gestione del folder
Dim fld As Outlook.MAPIFolder
Public Sub MiaMacro()
    'etichetta errore
    On Error GoTo ErrorHandler
    'variabili per la gestione del db
   Dim recDati As New ADODB.Recordset
   Dim conDati As New ADODB.Connection
   
   'variabile per la gestione degli elementi di outlook
   Dim nms As Outlook.NameSpace
   Dim itms As Outlook.Items
   Dim itm As Outlook.MailItem
   'varie impostazioni.
   Dim strCartella As String
   Dim BlnFound As Boolean
   'oggetto mapi
   Set nms = Application.GetNamespace("MAPI")
   'imposto la cartella
   strCartella = "Importazione"
  
   'effettuo una ricerca delle cartelle
   BlnFound = TrovaCartella(nms.Folders(2).Folders, strCartella)
   'verifico se esiste
   If BlnFound = True Then
      Set fld = nms.Folders(2).Folders(strCartella)
   Else
      'messaggio ed esco
      MsgBox ("La cartella non esiste, verificare la correttezza dei dati")
      Exit Sub
   End If
 
   'carico il db
   conDati.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb;User Id=;Password=;"
   'apro la connessione db
   conDati.Open
   'apro il recordset carico i dati
   recDati.CursorLocation = adUseClient
   recDati.CursorType = adOpenDynamic
   recDati.LockType = adLockOptimistic
   recDati.Open "select * from dati", conDati
   
   'mi connetto al database
   If recDati.RecordCount = 0 Then
      MsgBox ("Non ci sono dati da importare")
      Exit Sub
   End If
   
   Set itms = fld.Items
 
   Do Until recDati.EOF
        'oggetto mail item
        Set itm = itms.Add(olMailItem)
      
        'campo nome
       If IsNull(recDati!Nome) = False Then itm.CC = recDati!Nome
        'cognome
        If IsNull(recDati!Cognome) = False Then itm.BCC = recDati!Cognome
        'posta
        If IsNull(recDati!descrizione) = False Then itm.Body = recDati!descrizione
       'oggetto
        If IsNull(recDati!oggetto) = False Then itm.Subject = recDati!oggetto
     
        itm.Close 0
        'sposto il messaggio nell'apposita cartella per esserne certo
        itm.Move fld
        recDati.MoveNext
   Loop
    'chiudo il recordset e libero la memoria
    recDati.Close
    Set recDati = Nothing
    conDati.Close
    Set conDati = Nothing
    Exit Sub
 
ErrorHandler:
   'libero la memoria
   If recDati.State = adStateOpen Then recDati.Close
   If conDati.State = adStateOpen Then conDati.Close
   Set recDati = Nothing
   Set conDati = Nothing
   MsgBox "Errore Numero: " & Err.Number & "; Descrizione: " & Err.Description
  
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Description: Trova la cartella che in cui si desiderano importare I dati
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function TrovaCartella(fldsParent As Folders, strCartella As String) As Boolean
      For Each fld In fldsParent
      If fld.Name = strCartella Then
         TrovaCartella = True
         Exit Function
      End If
   Next
 
End Function
 
Il frammento di codice riportato precedemente illustra come importare I dati da una database Access in outlook.
La procedura denominata Sub MiaMacro, è il punto di avvio della Macro, che può essere avviato tramite il menu strumenti->macro-> Nome Macro (MiaMacro)
Gli oggetti Adodb.Connction ed AdoDb.Recordoset, permetto la gestione della connessione al database, e la gestione dei dati. La funzione trovaCartella, effettua un ciclo nelle varie cartelle di outlook, una volta individuata quella interessata, esce dalla funzione.
Se la ricerca ha dato esito positivo, si effettua una connessione al database e si rilevano i dati, altrimenti se la ricerca ha dato esito negativo, si esce dalla macro.
Dopo aver verificato che il recordset contiente i dati, si effettua un ciclo, impostando l’oggetto mailitem, il quale rappresenta un oggetto di tipo email. Tale oggetto presenta le proprietà comuni di una email, nel ciclo vengono impostate alcune proprietà dell’oggeto. Tramite il metodo move, ci si accerta che l’elemento si trovi nella cartella di nostro interesse.
 
Conclusioni
In questo articolo si è visto come importare I dati da un database Microsoft Access in Outlook tramite Visual Basic Application, questo linguaggio può aggiungere nuove ed interessanti funzionalità al programma Outlook ed altri programmi Microsoft Office.