Finalità
In questo articolo viene presentato un esempio di codice VBA da utilizzare per intervenire sui campi contenenti un numero di Fax all'interno dei Contatti esistenti in una cartella.
L'utilità immediata di questa procedura è quella di modificare il numero di fax affinché Outlook non lo consideri come un indirizzo valido, e di conseguenza non lo presenti all'interno della Rubrica come indirizzo aggiuntivo oltre all'email. Operativamente ogni numero di Fax viene prefissato con una serie di caratteri alfanumerici (in questo caso la parola "fax:"). Il numero "123 123 123" diventerà quindi "fax:123 123 123".
Breve descrizione della procedura
Il codice è scritto all'interno di una procedura indipendente, e per finalità didattiche non è particolarmente ottimizzato.
La procedura, dopo aver dichiarato le variabili necessarie, presenta una finestra di dialogo attraverso la quale l'utente sceglie la cartella dei Contatti sulla quale effettuare l'intervento di modifica. Dopo aver verificato la validità della cartella il codice inizia un loop su tutti gli elementi contenuti nella cartella ma effettua un intervento solamente sugli elementi di tipo "Contatto" (oggetto ContactItem, afferente alla classe olContact).
Per ciascun elemento vengono verificati tre campi che potenzialmente possono contenere un numero di fax:
"Fax (ufficio)" (proprietà .BusinessFaxNumber),
"Fax (Abitazione)" (proprietà .HomeFaxNumber) e
"Altro Fax" (proprietà .OtherFaxNumber).
Per ciascuno di essi si controlla la presenza di almeno un carattere diverso dallo spazio e che il numero non sia già prefissato, e nel caso viene aggiunta la parola "fax:" prima del numero.
Se è stato fatto almeno un intervento su uno dei tre numeri il Contatto viene esplicitamente salvato.
Al termine della procedura viene presentata una finestra di dialogo che indica la fine del processo ed informa su quanti Contatti è stata effettuata la modifica.
Public Sub ModificaNumeroFax()
'La procedura inserisce prima di ogni numero di fax
' una serie di caratteri alfanumerici, evitando che
' Outlook li consideri come indirizzi validi.
Dim objApp As Application
Dim objNS As NameSpace
Dim objFolder As MAPIFolder
Dim objItems As Items
Dim objItem As Object
Dim sFax As String, bSalvataggio As Boolean
Dim lModificati As Long
Set objApp = CreateObject("Outlook.Application")
Set objNS = objApp.GetNamespace("MAPI")
'Richiede la cartella sulla quale operare.
Set objFolder = objNS.PickFolder
If Not objFolder Is Nothing Then
'Effettua un loop su tutti gli elementi della cartella indicata.
Set objItems = objFolder.Items
For Each objItem In objItems
'Verifica che la modifica venga eseguita solamente
' su un elemento di tipo Contatto.
If objItem.Class = olContact Then
'Resetta il flag che indica la necessità di salvare.
bSalvataggio = False
'Effettua i controlli sul Fax (ufficio).
sFax = objItem.BusinessFaxNumber
'Verifica se il campo contiene almeno qualche carattere
' oppure è già stato modificato in precedenza.
If Len(Trim(sFax)) > 0 And LCase$(Left$(sFax, 4)) <> "fax:" Then
sFax = "fax:" & sFax
objItem.BusinessFaxNumber = sFax
bSalvataggio = True
End If
'Effettua i controlli sul Fax (abitazione).
sFax = objItem.HomeFaxNumber
'Verifica se il campo contiene almeno qualche carattere
' oppure è già stato modificato in precedenza.
If Len(Trim(sFax)) > 0 And LCase$(Left$(sFax, 4)) <> "fax:" Then
sFax = "fax:" & sFax
objItem.HomeFaxNumber = sFax
bSalvataggio = True
End If
'Effettua i controlli su Altro Fax.
sFax = objItem.OtherFaxNumber
'Verifica se il campo contiene almeno qualche carattere
' oppure è già stato modificato in precedenza.
If Len(Trim(sFax)) > 0 And LCase$(Left$(sFax, 4)) <> "fax:" Then
sFax = "fax:" & sFax
objItem.OtherFaxNumber = sFax
bSalvataggio = True
End If
'Se c'è stata almeno una modifica allora
' salva il Contatto.
If bSalvataggio = True Then
'Salva il Contatto.
objItem.Save
'Aggiorna il contatore.
lModificati = lModificati + 1
End If
End If
Next
End If
Set objItems = Nothing
Set objItem = Nothing
Set objFolder = Nothing
Set objNS = Nothing
Set objApp = Nothing
MsgBox "Procedura terminata. Sono stati modificati " _
& lModificati & " contatti.", vbInformation
End Sub