Sto passato da office 2003 32bit a office 2010 a 64bit.
Ho una funzione che sia tramite access che excel invia una mail in modo automatico utilizzando outlook.
Passando alla versione 2010 64bit sto riscontrando un problema che non riesco a capire..
Vi passo il codice:
Funzione1 in access, valorizzo le variabili da trasportare in outlook, questa parte è OK.
codice:
Public Function invio_mail()
Dim blnSuccessful As Boolean
Dim strHTML As String
Dim StyleO As String
Dim CHIUDI As String
Dim Style1 As String
Dim Style1R As String
Dim Style2 As String
Dim Style2R As String
Dim Inviato_a As String
Dim Oggetto As String
Dim Allegato As String
Dim in_copia As String
Dim in_copia_nascosta As String
' Apro il tag per compilare gli Stili
StyleO = "<style type=" & """text/css""" & ">"
CHIUDI = "</span>"
' CREO 2 STILI DI TESTO CHE RICHIAMO NEL CSS DELL'HTML
Style1 = ".stile1{font-family:" & """Trebuchet ms""" & ",arial;font-size:1.0em;color:#000;}" ' TIPO STILE
Style1R = "<span class=" & """stile1""" & ">"
Style2 = ".stile2{font-family:" & """Trebuchet ms""" & ",arial;font-size:1.0em;color:#3C9;}" ' TIPO STILE
Style2R = "<span class=" & """stile2""" & ">"
' SCRIVO IL MESSAGGIO DA INVIARE VIA EMAIL TRAMITE HTML
strHTML = "<html><head>" & StyleO & Style1 & Style2 & "</style></head>" & _
"<body>" & _
Style1R & "Contenuto della mail" & CHIUDI & _
"</body></html>"
Inviato_a = "mail@dominio.com"
Oggetto = "Oggetto mail"
Allegato = ""
in_copia = ""
in_copia_nascosta = ""
blnSuccessful = FnSafeSendEmail(Inviato_a, Oggetto, strHTML, Allegato, in_copia, in_copia_nascosta)
End Function
Funzione2 in access, da qui verifico che il visual basic di outlook sia aperto e passo i parametri alla funzione contenente in esso..
codice:
Public Function FnSafeSendEmail(strTo As String, _
strSubject As String, _
strMessageBody As String, _
Optional strAttachmentPaths As String, _
Optional strCC As String, _
Optional strBCC As String) As Boolean
Dim objOutlook As Object
Dim objNameSpace As Object
Dim objExplorer As Object
Dim blnSuccessful As Boolean
Dim blnNewInstance As Boolean
' VERIFICO SE IL COMPILATORE DI OUTLOOK E' GIA' APERTO
On Error Resume Next
Set objOutlook = GetObject(, "Outlook.Application")
On Error GoTo 0
' SE OUTLOOK è CHIUSO LO APRO e creo una nuova istanza
If objOutlook Is Nothing Then
'Outlook non è già in esecuzione - creare una nuova istanza ...
Set objOutlook = CreateObject("Outlook.Application")
blnNewInstance = True
'CREO un'istanza di ambiente di Visual Basic ..
Set objNameSpace = objOutlook.GetNamespace("MAPI")
Set objExplorer = objOutlook.Explorers.Add(objNameSpace.Folders(1), 0)
objExplorer.CommandBars.FindControl(, 1695).Execute
objExplorer.Close
Set objNameSpace = Nothing
Set objExplorer = Nothing
End If
' AVVIO LA FUNZIONE INTERNA A OUTLOOK PER L'INVIO DELLA E-MAIL
blnSuccessful = objOutlook.FnSendMailSafe(strTo, strCC, strBCC, strSubject, strMessageBody, strAttachmentPaths)
' CHIUDO TUTTO
If blnNewInstance = True Then objOutlook.Quit
Set objOutlook = Nothing
FnSafeSendEmail = blnSuccessful
End Function
E' qui che si presenta il problema..
quando il codice esegue questa istruzione Set objOutlook = GetObject(, "Outlook.Application") rileva correttamente outlook ma quando tento di passare il codice da access a outlook tramite questa stringa: blnSuccessful = objOutlook.FnSendMailSafe(strTo, strCC, strBCC, strSubject, strMessageBody, strAttachmentPaths) mi esce questo errore (Proprietà o metodo non supportati dall'oggetto)
Funzione presente in outlook:
codice:
Public Function FnSendMailSafe(strTo As String, _
strCC As String, _
strBCC As String, _
strSubject As String, _
strMessageBody As String, _
Optional strAttachments As String) As Boolean
On Error GoTo ErrorHandler:
Dim MAPISession As Outlook.NameSpace
Dim MAPIFolder As Outlook.MAPIFolder
Dim MAPIMailItem As Outlook.MailItem
Dim oRecipient As Outlook.Recipient
Dim TempArray() As String
Dim varArrayItem As Variant
Dim strEmailAddress As String
Dim strAttachmentPath As String
Dim blnSuccessful As Boolean
da qui continua il codice che invia la mail....
- Per far funzionare il codice bisogna settare il livello di protezione della macro a LOW, già settato ma niente..
- Il codice lo devo utilizzare su Windows server 2008 64bit con office 2010 64bit, ho fatto un test anche sul seven a 64bit ma rilevo lo stesso problema..
- Non ho ancora avuto modo di fare un test con versioni a 32bit
Qualcuno è già incappato in questo problema o sa darmi qualche dritta per risolvere?
Grazie a tutti per l'attenzione