Ciao a tutti,
in questo giorni ho modificato il Tool che invia allegati tramite email seguendo alcune necessità di Alessandra.
Le modifiche sono le seguenti:
1) verifica della presenza dei nomi inseriti nella base dati con quelli presenti in elenco
e segnalazione di eventuali assenze
2) selezione attraverso di un file dialog della cartella dove salvare gli allegati
3) creazione di un file “xls” o “xlsx” in base alla versione Excel utilizzata
4) scelta tra invio del file allegato in Excel o in Pdf
5) inserimento nell’allegato di un’intestazione e/o logo aziendale
Ecco il file avanzato:
Tool crea file da elenco – Excel o PDF
Per chi fosse interessato a come funziona il codice…. buona lettura!
PUNTO 1.
Verifico l’ultima riga non vuota nel foglio ‘Nomi’ (la rubrica degli indirizzi)
Sheet1.Select
Last_Row_1 = ActiveSheet.Cells.Find(“*”, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Verifico l’ultima riga non vuota nel foglio ‘Base Dati’ (archivio dei dati da analizzare)
Sheet2.Select
Last_Row_2 = ActiveSheet.Cells.Find(“*”, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Con un ciclo for-next prendo ciascun nome in ‘Base Dati’, lo confronto con quelli in ‘Nomi’
se non lo trovo la variabile NomeTrovato rimane uguale a zero e quindi lancio messaggio di avviso
e blocco l’esecuzione della macro
For i = 2 To Last_Row_2
NomeTrovato = 0 ‘inizializzo la variabile
For y = 2 To Last_Row_1
If Sheet2.Cells(i, 1) = Sheet1.Cells(y, 1) Then
NomeTrovato = NomeTrovato + 1
End If
Next y
If NomeTrovato = 0 Then
MsgBox “Non trovata corrispondenza dati per ‘” & Sheet2.Cells(i, 1) & “‘” & Chr(10) & Chr(10) & _
“Verifica che:” & Chr(10) & _
“- sia presente nel foglio ‘Nomi'” & Chr(10) & _
“- sia scritto nello stesso modo nel foglio ‘Nomi’ ed in quello ‘Base Dati'”, vbInformation
Sheet2.Cells(i, 1).Select
Exit Sub
End If
Next i
PUNTO 2.
Dim fDialog As Office.FileDialog
Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)
Dim selezione As Variant
Dim PercorsoStandard As String
‘PercorsoStandard = “C:\” ‘inserite il vostro percorso preferito e togliete la virgoletta prima di PercorsoStandard
With fDialog
.AllowMultiSelect = False
.Title = “Seleziona il percorso dove salvare i file”
‘.InitialFileName = PercorsoStandard ‘togliete la virogletta prima di .InitialFileName se avete definito il PercorsoStandard
If .Show = -1 Then
For Each selezione In .SelectedItems
cartella = selezione
Next
Else
MsgBox “Operazione annullata!”, vbInformation
Sheet2.Select
Exit Sub
End If
End With
Set fDialog = Nothing
PUNTO 3.
Con questa funzione verifico la versione Excel utilizzata
(un ringraziamento a chi tempo fa l’ha creata risolvendo un mio problema)
Public Function fVersioneExcel() As Long
With Application
fVersioneExcel = Val(Mid(.Version, 1, InStr(1, .Version, “.”) – 1))
End With
‘NOTE
‘Excel 2010 = 14
‘Excel 2007 = 12
‘Excel 2003 = 11
‘Excel 2002 = 10
‘Excel 2000 = 9
End Function
A secondo del valore restituito dalla funzione fVersioneExcel, assegno alla variabile ‘nome’ l’estensione corretta:
If fVersioneExcel < 12 Then
nomefile = nome & ” ” & Format(Date, “yyyy_mm_dd”) & “.xls”
ElseIf fVersioneExcel >= 12 Then
nomefile = nome & ” ” & Format(Date, “yyyy_mm_dd”) & “.xlsx”
End If
PUNTO 4.
La routine ‘LanciaMacro’ crea sia l’allegato Excel che quello in PDF
Il PDF è creato con questa istruzione:
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
cartella & “\” & nomefilePDF, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
‘>>>> OpenAfterPublish:=False imposto a False per non far aprire il PdF dopo la sua creazione
La scelta di che tipo di file allegare viene effettuata attraverso la selezione
degli Option Button presenti nel foglio “Base Dati’
Il codice è il seguente:
If Sheet2.OptionButton1 = True Then
Call InviaMailconPDF(nome, mail, cartella, nomefilePDF)
ElseIf Sheet2.OptionButton2 = True Then
Call InviaMailconExcel(nome, mail, cartella, nomefile)
End If
In base all’opzione selezionata, viene lanciata la macro che allega il file in Excel (InviaMailconExcel)
oppure in PDF (InviaMailconPDF)
Le due macro differiscono solo dalla variabile utilizzata per identificare il file da allegare
(nomefile o nomefilePDF)
PUNTO 5.
La macro prima copia i dati filtrati nel foglio ‘Foglio da inviare’
e poi copia il foglio ‘Foglio da inviare’ in un nuovo file (quello che sarà allegato)
In questo modo è possibile impostare il formato, l’intestazione ed il logo desiderato.
Se si desidera incollare i dati in una posizione diversa, nella routine “CopiaDati”
inserite al posto di “Range(“B6″).Select” una cella diversa (ricordate di spostare anche le righe di intestazione presenti nel foglio ‘Foglio da inviare’
Riccardo Vincenti
Riccardo Vincenti
Ultimi post di Riccardo Vincenti (vedi tutti)
- 073. Duplicare righe excel modificando il contenuto - 6 Ottobre 2017
- 072. Estrazione numeri casuali - 6 Ottobre 2017
- 071. Estrazione casuale valori da un elenco - 5 Ottobre 2017
- 070. Contare dati univoci senza Pivot - 21 Settembre 2017
- 069. Aggiungere intervalli ad una data: Date Add in Excel - 21 Settembre 2017
Ciao, davvero un ottimo lavoro, ma mi sembra ci sia un piccolo errore.
Prova a fare caso al file di “output” di Nadia…siccome ha una riga in meno resta visibile la riga del file precedente (SANDRA).
come si può aggiustare?
un saluto e complimenti