Importare i dati in Microsoft Outlook da un database Microsoft Access tramite VBA

In questo articolo vedremo come importare i dati di un database Microsoft Access in una cartella di Microsoft Outlook 2003.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

Introduzione:
In questo articolo, vedremo come importare i dati da un database Microsoft Access nel programma di posta elettronica Microsoft Outlook.
Tramite gli oggetti outlook, in particolare mapifolder , namespace, items e mailitem, possiamo gestire i vari oggetti di Outlook.

Creazione del database.

Si crea un database Microsoft Access, il quale ha un tabella denominata “dati”, con i seguenti campi:
Nome
Cognome
Oggetto
Descrizione
Dopo aver impostato i vari campi della tabella, la valorizziamo con i dati a nostro piacimento.

Aggiunta di un riferimento ADO.

Occorre aprire l’editor per Visual Basic Application, per la stesura del codice e per l’inserimento dei componententi. Per aggiungerlo (strumenti->Macro->Visual Basic Application)
Per gestire i dati di un database Microsoft Access, possiamo utilizzare l’oggetto ADO (ActiveX Data Object), il quale tramite gli oggetti Connection e Recordset, possiamo effettuare la ricerca e manipolazione dei dati.

Per aggiungere un riferimento al progretto, tramite il menu strumenti, selezionare la voce Riferimenti, nella finestra che viene aperta, selezionare la voce Microsoft ActiveX Data Object 2.8 library, dove 2.8 indica la versione, può variare da pc a pc.

Dopo averla selezionata tramite apposita spunta, chiudiamo la finestra tramite il pulsante ok.

Stesura del codice
A questo punto non resta che scrivere il codice per effettuare l’importazione dei dati.
Nell’editor VBA, inseriamo il codice VBA nell’oggetto Microsoft Office Outlook Object, in particolare fare doppio click alla voce ThisOutlookSession.

Di seguito si riporta il codice per importare i dati.

 

 
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.