Il blog di Gianni Giaccaglini

Blog su VBA e VSTO
Gianni Giaccaglini

My Links

News

NB - V. anche gli ARTICOLI (in fondo a questa barra)
Solo quesiti validi a: giannigiac@tin.it
Il mio nuovo libro


La mia nipotina ELISA

Foto con dedica a ME di
Bill Gates giovanissimo
nei mitici anni 80!

Categorie Post

Categorie Articoli

Archivio

Immagini

Blog Stats

Automazione dell’e-mail (con richiesta di aiuto)

Automazione dell’e-mail (con richiesta di aiuto)

ULTIM'ORA. Alla richiesta è pervenuta una segnalazione interessante da un bravo Giorgio Villa. La incollo subito qui sotto (e va da sé che sarà bene leggere prima l'appello originario di un tal Filippo Rizzo:

Ho avuto il medesimo problema, non essendo farina del mio sacco, ho utilizzato i suggerimenti di una valida persona http://www.rondebruin.nl/mail/folder1/mail3.htm

in alternativa

http://www.rondebruin.nl/mail/folder1/mail2.htm

http://www.rondebruin.nl/mail/folder1/mail1.htm

 

L'intervento originario di Filippo Rizzi

Un visitatore, Filippo Rizzi, mi chiede una soluzione a un problema che lo affligge, relativo a un fastidioso messaggio di conferma che inesorabilmente gli appare quando utilizza una sua applicazione Excel VBA di spedizione automatica di messaggi di posta elettronica, precisamente in corrispondenza dell’istruzione di invio (Send). Onestamente ho subito ammesso che la questione esulava dalle mie competenze anzi, peggio, un tempo mi sono dilettato con (semplici) routine del genere ma oggi come oggi non le ricordo. Così al volo ho solo suggerito l’inserimento dell’istruzione Application.DisplayAlerts = False, con un certo scetticismo “a sentimento” che potesse funzionare nella fattispecie (d’altronde anche in altri casi essa delude le aspettative).

In prossimità delle vacanze ho pensato di chiedere all’autore di rivelare all’inclita e al volgo la sua creatura, pubblicandola sul mio blog con la richiesta pubblica di soccorso del genere chi-sa-parli.

L’e-mail del buon Filippo è riportata qui sotto:

filippo.rizzo@telecomitalia.it

Ed ecco la sua replica:

Fornisco volentieri il codice che utilizzo, ma il guaio è che anche con la con la funzione di DisplayAlerts = False la protezione di Windows (prevista dal service pack 3 in poi) mi blocca ed attende una CONFERMA (SI/NO/Annulla) e non c'è verso neanche di attenuare le protezioni do Outlook solo in quel momento.
Dovrebbe essere possibile solo con CDOSYS o via SMTP, ma non riesco
.

 

Quanto alla routine si presenta sufficientemente chiara e ben commentata, perlomeno come ricetta. Pertanto mi limito a precisare che il procedimento utilizza il meccanismo di OLE Automation richiamando cioè Outlook con:

Set App = CreateObject("Outlook.Application")

Un altro mio piccolo ritocco  è l’inserimento di un Exit Sub per il caso di assenza di materiale da spedire (l’originale di Filippo prevedeva una If completata dalla corrispettiva End If a monte di End Sub).

Buona lettura e... meditazione.

Private Sub CommandButton2_Click()
  Dim FileExtStr As String
  Dim FileFormatNum As Long
  Dim Sourcewb As Workbook
  Dim Destwb As Workbook
  Dim TempFilePath As String
  Dim TempFileName As String
  Dim OutApp As Object
  Dim OutMail As Object

 

  Program = ThisWorkbook.Name
  Paraco = "Paraco" ' Nome del foglio che contiene i PARAmetri di COntrollo
  PathArchivie = _

  Workbooks(Program).Worksheets(Paraco).Cells(4, 2)
  FormatSave = Application.DefaultSaveFormat

' Carico la lista dei file dal percorso previsto

  NomiFiles = ScanDir(PathArchivie & "\", Lista)
  NFiles = UBound(Lista)
  If NFiles = 0 Then Exit Sub ' Nulla da spedire
    With Application
      .ScreenUpdating = False
      .EnableEvents = False
    End With

' Carico Oggetto e corpo della mail dal foglio dei parametri

  ESubject = _

  Workbooks(Program).Worksheets(Paraco).Cells(2, 12)
  Ebody = Workbooks(Program).Worksheets(Paraco).Cells(3, 12)

  ' qui faccio l'invio dei file che ho trovato
  For f = 0 To UBound(Lista)
   sendto = "indirzzo@server"
   CCTo = "indirzzo@server"
   NewFileName = PathArchivie & "\" & Lista(f)

' qui imposto l'applicazione Outlook
    Set App = CreateObject("Outlook.Application")
    Set Itm = App.CreateItem(0)
    With Itm
      .subject = ESubject
      .To = sendto
      .CC = CCTo
      .body = Ebody
      .Attachments.Add (NewFileName)
      Application.DisplayAlerts = False ‘ Purtroppo delude…
      .Send
    End With
    Set App = Nothing
  Set Itm = Nothing
    Next f
  With Application
    .ScreenUpdating = True
    .EnableEvents = True
  End With
End Sub

 

 

?>

?>

posted on domenica 9 agosto 2009 10.42