{"id":520,"date":"2013-04-20T08:52:18","date_gmt":"2013-04-20T06:52:18","guid":{"rendered":"http:\/\/www.office-guru.com\/wordpress\/?p=520"},"modified":"2014-04-12T16:45:18","modified_gmt":"2014-04-12T14:45:18","slug":"creare-file-con-vba-ed-inviarli-via-mail-avanzato","status":"publish","type":"post","link":"https:\/\/www.office-guru.com\/wordpress\/2013\/04\/creare-file-con-vba-ed-inviarli-via-mail-avanzato\/","title":{"rendered":"017. Creare file con VBA ed inviarli via mail (avanzato)"},"content":{"rendered":"<div style=text-align:right;><a class=\"wpptopdfenh\" target=\"_blank\" rel=\"noindex,nofollow\" href=\"https:\/\/www.office-guru.com\/wordpress\/2013\/04\/creare-file-con-vba-ed-inviarli-via-mail-avanzato\/?format=pdf\" title=\"Download PDF\"><img alt=\"Download PDF\" src=\"https:\/\/i0.wp.com\/www.office-guru.com\/wordpress\/wp-content\/plugins\/wp-post-to-pdf-enhanced\/asset\/images\/pdf.png?w=584\" data-recalc-dims=\"1\"><\/a><\/div><p>Ciao a tutti,<\/p>\n<p>in questo giorni ho modificato il Tool che invia allegati tramite email seguendo alcune necessit\u00e0 di Alessandra.<br \/>\nLe modifiche sono le seguenti:<br \/>\n1) verifica della presenza dei nomi inseriti nella base dati con quelli presenti in elenco<br \/>\ne segnalazione di eventuali assenze<br \/>\n2) selezione attraverso di un file dialog della cartella dove salvare gli allegati<br \/>\n3) creazione di un file &#8220;xls&#8221; o &#8220;xlsx&#8221; in base alla versione Excel utilizzata<br \/>\n4) scelta tra invio del file allegato in Excel o in Pdf<br \/>\n5) inserimento nell&#8217;allegato di un&#8217;intestazione e\/o logo aziendale<\/p>\n<p>Ecco il file avanzato:<br \/>\n<a href=\"http:\/\/www.office-guru.com\/wordpress\/wp-content\/uploads\/2013\/04\/Tool-crea-file-da-elenco-Excel-o-PDF.xls\">Tool crea file da elenco &#8211; Excel o PDF<\/a><\/p>\n<p>Per chi fosse interessato a come funziona il codice&#8230;. buona lettura!<\/p>\n<p><!--more--><\/p>\n<p><strong>PUNTO 1.<\/strong><br \/>\nVerifico l&#8217;ultima riga non vuota nel foglio &#8216;Nomi&#8217; (la rubrica degli indirizzi)<br \/>\nSheet1.Select<br \/>\nLast_Row_1 = ActiveSheet.Cells.Find(&#8220;*&#8221;, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row<\/p>\n<p>Verifico l&#8217;ultima riga non vuota nel foglio &#8216;Base Dati&#8217; (archivio dei dati da analizzare)<br \/>\nSheet2.Select<br \/>\nLast_Row_2 = ActiveSheet.Cells.Find(&#8220;*&#8221;, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row<\/p>\n<p>Con un ciclo for-next prendo ciascun nome in &#8216;Base Dati&#8217;, lo confronto con quelli in &#8216;Nomi&#8217;<br \/>\nse non lo trovo la variabile NomeTrovato rimane uguale a zero e quindi lancio messaggio di avviso<br \/>\ne blocco l&#8217;esecuzione della macro<\/p>\n<p>For i = 2 To Last_Row_2<\/p>\n<p>NomeTrovato = 0 &#8216;inizializzo la variabile<\/p>\n<p>For y = 2 To Last_Row_1<\/p>\n<p>If Sheet2.Cells(i, 1) = Sheet1.Cells(y, 1) Then<br \/>\nNomeTrovato = NomeTrovato + 1<br \/>\nEnd If<\/p>\n<p>Next y<\/p>\n<p>If NomeTrovato = 0 Then<br \/>\nMsgBox &#8220;Non trovata corrispondenza dati per &#8216;&#8221; &amp; Sheet2.Cells(i, 1) &amp; &#8220;&#8216;&#8221; &amp; Chr(10) &amp; Chr(10) &amp; _<br \/>\n&#8220;Verifica che:&#8221; &amp; Chr(10) &amp; _<br \/>\n&#8220;- sia presente nel foglio &#8216;Nomi'&#8221; &amp; Chr(10) &amp; _<br \/>\n&#8220;- sia scritto nello stesso modo nel foglio &#8216;Nomi&#8217; ed in quello &#8216;Base Dati'&#8221;, vbInformation<br \/>\nSheet2.Cells(i, 1).Select<br \/>\nExit Sub<br \/>\nEnd If<\/p>\n<p>Next i<\/p>\n<p><strong>PUNTO 2.<\/strong><br \/>\nDim fDialog As Office.FileDialog<br \/>\nSet fDialog = Application.FileDialog(msoFileDialogFolderPicker)<br \/>\nDim selezione As Variant<\/p>\n<p>Dim PercorsoStandard As String<br \/>\n&#8216;PercorsoStandard = &#8220;C:\\&#8221; &#8216;inserite il vostro percorso preferito e togliete la virgoletta prima di PercorsoStandard<\/p>\n<p>With fDialog<br \/>\n.AllowMultiSelect = False<br \/>\n.Title = &#8220;Seleziona il percorso dove salvare i file&#8221;<br \/>\n&#8216;.InitialFileName = PercorsoStandard &#8216;togliete la virogletta prima di .InitialFileName se avete definito il PercorsoStandard<\/p>\n<p>If .Show = -1 Then<br \/>\nFor Each selezione In .SelectedItems<br \/>\ncartella = selezione<br \/>\nNext<br \/>\nElse<br \/>\nMsgBox &#8220;Operazione annullata!&#8221;, vbInformation<br \/>\nSheet2.Select<br \/>\nExit Sub<br \/>\nEnd If<br \/>\nEnd With<\/p>\n<p>Set fDialog = Nothing<\/p>\n<p><strong>PUNTO 3.<\/strong><br \/>\nCon questa funzione verifico la versione Excel utilizzata<br \/>\n(un ringraziamento a chi tempo fa l&#8217;ha creata risolvendo un mio problema)<\/p>\n<p>Public Function fVersioneExcel() As Long<br \/>\nWith Application<br \/>\nfVersioneExcel = Val(Mid(.Version, 1, InStr(1, .Version, &#8220;.&#8221;) &#8211; 1))<br \/>\nEnd With<\/p>\n<p>&#8216;NOTE<br \/>\n&#8216;Excel 2010 = 14<br \/>\n&#8216;Excel 2007 = 12<br \/>\n&#8216;Excel 2003 = 11<br \/>\n&#8216;Excel 2002 = 10<br \/>\n&#8216;Excel 2000 = 9<br \/>\nEnd Function<\/p>\n<p>A secondo del valore restituito dalla funzione fVersioneExcel, assegno alla variabile &#8216;nome&#8217; l&#8217;estensione corretta:<\/p>\n<p>If fVersioneExcel &lt; 12 Then<br \/>\nnomefile = nome &amp; &#8221; &#8221; &amp; Format(Date, &#8220;yyyy_mm_dd&#8221;) &amp; &#8220;.xls&#8221;<br \/>\nElseIf fVersioneExcel &gt;= 12 Then<br \/>\nnomefile = nome &amp; &#8221; &#8221; &amp; Format(Date, &#8220;yyyy_mm_dd&#8221;) &amp; &#8220;.xlsx&#8221;<br \/>\nEnd If<\/p>\n<p><strong>PUNTO 4.<\/strong><br \/>\nLa routine &#8216;LanciaMacro&#8217; crea sia l&#8217;allegato Excel che quello in PDF<\/p>\n<p>Il PDF \u00e8 creato con questa istruzione:<\/p>\n<p>ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _<br \/>\ncartella &amp; &#8220;\\&#8221; &amp; nomefilePDF, Quality:=xlQualityStandard, _<br \/>\nIncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False<br \/>\n&#8216;&gt;&gt;&gt;&gt; OpenAfterPublish:=False imposto a False per non far aprire il PdF dopo la sua creazione<\/p>\n<p>La scelta di che tipo di file allegare viene effettuata attraverso la selezione<br \/>\ndegli Option Button presenti nel foglio &#8220;Base Dati&#8217;<\/p>\n<p>Il codice \u00e8 il seguente:<\/p>\n<p>If Sheet2.OptionButton1 = True Then<br \/>\nCall InviaMailconPDF(nome, mail, cartella, nomefilePDF)<br \/>\nElseIf Sheet2.OptionButton2 = True Then<br \/>\nCall InviaMailconExcel(nome, mail, cartella, nomefile)<br \/>\nEnd If<\/p>\n<p>In base all&#8217;opzione selezionata, viene lanciata la macro che allega il file in Excel (InviaMailconExcel)<br \/>\noppure in PDF (InviaMailconPDF)<br \/>\nLe due macro differiscono solo dalla variabile utilizzata per identificare il file da allegare<br \/>\n(nomefile o nomefilePDF)<\/p>\n<p><strong>PUNTO 5.<\/strong><br \/>\nLa macro prima copia i dati filtrati nel foglio &#8216;Foglio da inviare&#8217;<br \/>\ne poi copia il foglio &#8216;Foglio da inviare&#8217; in un nuovo file (quello che sar\u00e0 allegato)<br \/>\nIn questo modo \u00e8 possibile impostare il formato, l&#8217;intestazione ed il logo desiderato.<\/p>\n<p>Se si desidera incollare i dati in una posizione diversa, nella routine &#8220;CopiaDati&#8221;<br \/>\ninserite al posto di &#8220;Range(&#8220;B6&#8243;).Select&#8221; una cella diversa (ricordate di spostare anche le righe di intestazione presenti nel foglio &#8216;Foglio da inviare&#8217;<\/p>\n<p>Riccardo Vincenti<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ciao a tutti, in questo giorni ho modificato il Tool che invia allegati tramite email seguendo alcune necessit\u00e0 di Alessandra. Le modifiche sono le seguenti: 1) verifica della presenza dei nomi inseriti nella base dati con quelli presenti in elenco &hellip; <a href=\"https:\/\/www.office-guru.com\/wordpress\/2013\/04\/creare-file-con-vba-ed-inviarli-via-mail-avanzato\/\">Continua a leggere<span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"_links_to":"","_links_to_target":""},"categories":[13,6],"tags":[],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/p39IU1-8o","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":455,"url":"https:\/\/www.office-guru.com\/wordpress\/2013\/10\/invio-mail-vba-spedire-automaticamente-fogli-excel-tramite-outlook\/","url_meta":{"origin":520,"position":0},"title":"Invio mail con VBA: Spedire automaticamente fogli Excel tramite Outlook (anche come PDF)","date":"26 Ottobre 2013","format":false,"excerpt":"Il bisogno e' molto semplice: abbiamo una serie di fogli excel (report) da distribuire in modo selettivo a un insieme di colleghi. Vogliamo creare file excel specifici per ogni collega (gruppo di colleghi) contenente i report ad essi destinati vogliamo poter includere in una mail tale file excel (possibilmente senza\u2026","rel":"","context":"In &quot;Domande Lettori&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":493,"url":"https:\/\/www.office-guru.com\/wordpress\/2013\/04\/creare-file-con-vba-ed-inviarli-via-mail\/","url_meta":{"origin":520,"position":1},"title":"016. Creare file con VBA ed inviarli via mail","date":"4 Aprile 2013","format":false,"excerpt":"Domanda: Volevo sapere se con una macro posso splettare dei file in base al nome ma che mi mantenga le formule inserite e poi spedirle direttamente per e mail. \u2018-------- Risposta: ho preparato un file d\u2019esempio che pu\u00f2 tornare utile a tutti coloro vogliono assegnare ai propri collaboratori delle attivit\u00e0\u2026","rel":"","context":"In &quot;Domande Lettori&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1261,"url":"https:\/\/www.office-guru.com\/wordpress\/2014\/06\/054-creazione-ed-esportazione-tabella\/","url_meta":{"origin":520,"position":2},"title":"053. Creazione ed esportazione tabella","date":"8 Giugno 2014","format":false,"excerpt":"Domanda: Avrei una richiesta che non so se sia fattibile ma intanto vi sottopongo il problema: io ho due file excel: 1) contiene una tebella --> colonna A dove sono elencate 9 persone, colonna B progetti apartenenti alla persona(quindi nella colonna A ci sono nomi ripetuti), colonna C ore di\u2026","rel":"","context":"In &quot;Domande Lettori&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1403,"url":"https:\/\/www.office-guru.com\/wordpress\/2014\/12\/gmail-e-drive-via-libera-allediting-online-degli-allegati-microsoft-office\/","url_meta":{"origin":520,"position":3},"title":"Gmail e Drive: via libera all&#8217;editing online degli allegati Microsoft Office","date":"4 Dicembre 2014","format":false,"excerpt":"Google ha annunciato un\u2019importante novit\u00e0 per il suo servizio di posta elettronica: \u00e8 ora possibile modificare i file di Word, Excel e PowerPoint direttamente da Gmail oppure da Drive, senza dover scaricare il documento sul Pc. Via ICTBusiness","rel":"","context":"In &quot;Comunicazioni&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":92,"url":"https:\/\/www.office-guru.com\/wordpress\/2013\/02\/un-calendario-automatico-con-gestione-delle-festivita\/","url_meta":{"origin":520,"position":4},"title":"Un calendario automatico con gestione delle festivit\u00e0","date":"7 Febbraio 2013","format":false,"excerpt":"In questa pagina pubblichiamo la metodologia per creare un calendario automatico in Excel per ad esempio: Gestione di attivit\u00e0 Gestione di turni di lavoro Gestione di piani ferie il file Excel si presenta con due fogli: il primo \u00e8 un foglio che rappresenta il calendario stesso e il secondo invece\u2026","rel":"","context":"In &quot;Excel&quot;","img":{"alt_text":"","src":"https:\/\/i1.wp.com\/www.office-guru.com\/wordpress\/wp-content\/uploads\/2013\/02\/calendario_automatico_2-300x297.gif?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":8,"url":"https:\/\/www.office-guru.com\/wordpress\/2013\/02\/office-guru-toolbar-i-tool-di-office-guru-disponibili-sul-vostro-excel\/","url_meta":{"origin":520,"position":5},"title":"Office Guru Toolbar: i tool di Office-Guru disponibili sul vostro Excel!","date":"6 Febbraio 2013","format":false,"excerpt":"Office-Guru rende disponibile una toolbar che permette di espandere le funzionalit\u00e0 di Excel con nuove funzioni. Dopo aver installato la toolbar seguendo le istruzioni disponibili in questa pagina avrete una nuova voce di\u00a0menu e una nuova barra di bottoni identica a quella rappresentata nell'immagine.Le funzionalit\u00e0 della barra sono le seguenti:\u2026","rel":"","context":"In &quot;Tools&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.office-guru.com\/wordpress\/wp-json\/wp\/v2\/posts\/520"}],"collection":[{"href":"https:\/\/www.office-guru.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.office-guru.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.office-guru.com\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.office-guru.com\/wordpress\/wp-json\/wp\/v2\/comments?post=520"}],"version-history":[{"count":18,"href":"https:\/\/www.office-guru.com\/wordpress\/wp-json\/wp\/v2\/posts\/520\/revisions"}],"predecessor-version":[{"id":1186,"href":"https:\/\/www.office-guru.com\/wordpress\/wp-json\/wp\/v2\/posts\/520\/revisions\/1186"}],"wp:attachment":[{"href":"https:\/\/www.office-guru.com\/wordpress\/wp-json\/wp\/v2\/media?parent=520"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.office-guru.com\/wordpress\/wp-json\/wp\/v2\/categories?post=520"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.office-guru.com\/wordpress\/wp-json\/wp\/v2\/tags?post=520"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}