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.