View Full Version : [EXCEL] Invio e-mail
Ho la necessità di inviare un foglio di Excel o anche solo parte del suo contenuto tramite e-mail, ma fin'ora sono riuscito, col metodo "SendMail" ad inviare l'intero documento.
Sapete dirmi come si fa ad inviare solo un foglio o una selezione?
Grazie!
Er Monnezza
17-06-2007, 16:31
UP!
puoi zippare il file e spedirlo come allegato, dato che il file non compresso può avere dimensioni considerevoli, zippandolo invece si riduce drasticamente
Si, lo so che si possono zippare i file, ma il mio problema è che ho inviato un listino ad alcuni clienti ed in questo listino c'è un modulo per fare i preventivi ed eventualmente inviare gli ordini.
Io vorrei fare in modo che semplicemente cliccando su un pulsante, la pagina relativa al preventivo venga inviata via e-mail come ordine.
Purtroppo fin'ora riesco solamente a fare in modo che venga inviato tutto il documento Excel che a causa del listino con oltre 15.000 articoli supera i 2 MByte.
Il cliente potrebbe sempre stampare la pagina ed inviarla via fax, ma io verrei fare in modo che la procedura fosse un po' più pratica e veloce.
Er Monnezza
27-06-2007, 11:30
Si, lo so che si possono zippare i file, ma il mio problema è che ho inviato un listino ad alcuni clienti ed in questo listino c'è un modulo per fare i preventivi ed eventualmente inviare gli ordini.
Io vorrei fare in modo che semplicemente cliccando su un pulsante, la pagina relativa al preventivo venga inviata via e-mail come ordine.
Purtroppo fin'ora riesco solamente a fare in modo che venga inviato tutto il documento Excel che a causa del listino con oltre 15.000 articoli supera i 2 MByte.
Il cliente potrebbe sempre stampare la pagina ed inviarla via fax, ma io verrei fare in modo che la procedura fosse un po' più pratica e veloce.
zippandolo invece da 2mb che è, può essere ridotto di brutto; per farti un esempio, io ho fatto la prova adesso con un file di access grande 1,5 mb, l'ho compresso con winrar ed è diventato di 33k; quindi vedi tu, a me sembra più conveniente zipparlo che sbattersi la testa per capire come spedire solo una parte del file
No ragazzi, grazie per l'impegno, ma non ci siamo. Se avete letto il mio terzo post, avrete compreso che la e-mail non devo inviarla io, ma bensì i miei clienti e non posso di certo pretendere che ognuno di loro sappia come si fa a zippare un file, anche perché sarebbe comunque una procedura un po' macchinosa, soprattutto per alcuni.
Vi riassumo tutta la storia:
Ho creato un cartella di lavoro chiamata LISTINO.XLS che contiene due fogli distiniti, uno chiamato ARTICOLI e l'altro chiamato PREVENTIVI. Nel foglio ARTICOLI sono contenute circa 15.000 righe con codici, descrizioni, prezzi e sconti, mentre nel foglio PREVENTIVI, c'è un modulo che permette ai clienti di inserire codici e quantità ed avere in automatico i totali, gli sconti, l'IVA etc...
Naturalmente, una volta creato il preventivo, può essere che il cliente decida di inoltrare l'ordine e purtroppo al momento, l'unico metodo che può utilizzare e stampare il foglio ed inviarlo via fax. Qualcuno dei miei clienti ha pensato di salvare la cartella intera e rispedirmela via e-mail, ma come ho già detto, le dimensioni sono un po' troppo grandi, soprattutto quando mi trovo a dover scaricare la posta con collegamenti lenti.
Purtroppo i clienti non possono nemmeno fare il copia incolla delle celle perché per motivi di riservatezza le ho bloccate con la password e le uniche che sono sbloccate sono quelle relative a quantità e codici.
Come posso fare?
Ancora UP!!!
E' più difficile di quanto pensavo o sarà la bella stagione che ci atrofizza i cervelli?
A parte gli scherzi, se c'è qualcuno che ci capisce di brutto col VBA di Excel, si faccia vivo per favore!
23_Alby23
05-07-2007, 09:14
Usa questo codice per la macro.
L'utente dovrà posizionarsi nello sheet da inviare (il preventivo) e lanciare la macro.
Sostituisci nome.cognome@provider.it con il tuo indirizzo mail.
Sub Mail_ActiveSheet()
' Works in Excel 97 through Excel 2007.
Dim FileExtStr As String
Dim FileFormatNum As Long
Dim Sourcewb As Workbook
Dim Destwb As Workbook
Dim TempFilePath As String
Dim TempFileName As String
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Set Sourcewb = ActiveWorkbook
' Using ActiveSheet.Copy creates a new workbook with
' the sheet and the file format is the same as the
' original workbook.
' Copy the worksheet to a new workbook.
ActiveSheet.Copy
Set Destwb = ActiveWorkbook
' Determine the Excel version and file extension/format.
With Destwb
If Val(Application.Version) < 12 Then
' You are using Excel 97-2003.
FileExtStr = ".xls": FileFormatNum = -4143
Else
' You are using Excel 2007.
' When you use ActiveSheet.Copy to create a workbook,
' you are prompted with a security dialog. If you click No
' in the dialog, then the name of Sourcewb is the same
' as Destwb and you exit the subroutine. You only see this
' dialog when you attempt to copy a worksheet from an .xlsm file with macros disabled.
If Sourcewb.Name = .Name Then
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
MsgBox "Your answer is No in the security dialog."
Exit Sub
Else
Select Case Sourcewb.FileFormat
' Code 51 represents the enumeration for a macro-free
' Excel 2007 Workbook (.xlsx).
Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
' Code 52 represents the enumeration for a
' macro-enabled Excel 2007 Workbook (.xlsm).
Case 52:
If .HasVBProject Then
FileExtStr = ".xlsm": FileFormatNum = 52
Else
FileExtStr = ".xlsx": FileFormatNum = 51
End If
' Code 56 represents the enumeration for a
' a legacy Excel 97-2003 Workbook (.xls).
Case 56: FileExtStr = ".xls": FileFormatNum = 56
' Code 50 represents the enumeration for a
' binary Excel 2007 Workbook (.xlsb).
Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
End Select
End If
End If
End With
' Change all cells in the worksheet to values, if desired.
'' With Destwb.Sheets(1).UsedRange
'' .Cells.Copy
'' .Cells.PasteSpecial xlPasteValues
'' .Cells(1).Select
'' End With
''Application.CutCopyMode = False
'Save the new workbook and then mail it.
TempFilePath = Environ$("temp") & "\"
TempFileName = "Part of " & Sourcewb.Name & " " & Format(Now, "dd-mmm-yy h-mm-ss")
With Destwb
.SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
On Error Resume Next
.SendMail "nome.cognome@provider.it", _
"This is the Subject line."
On Error GoTo 0
.Close SaveChanges:=False
End With
' Delete the file you just sent.
Kill TempFilePath & TempFileName & FileExtStr
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
AZZ!!!!
Non ho ancora avuto modo di provare il tuo codice, ma grazie lo stesso Alby! di certo non ti è mancato l'impegno.
Ti farò sapere l'esito, non appena avrò tempo di inserire il codice nel mio modulo preventivi.
Grazie ancora.
Ok, il codice funziona, ma purtroppo il file che viene inviato è sempre molto grande, un po' meno dell'originale, ma comunque circa 1,5 Mb.
Io vorrei che il software facesse in modo di incorporare nel messaggio della mail, soltanto una selezione di celle del foglio di lavoro, mentre col metodo consigliato da Alby, viene inviata comunque una mole di dati superflua.
Per me sarebbe sufficiente ricevere una mail anche NON in formato Excel, ma semplicemente una tabella ricopiata dal foglio elettronico, indicante esclusivamente quantità, codici, descrizioni, prezzi e sconti.
Si può fare?
Evvai!!! Sono riuscito ad inviare solo la selezione, ottenendo così un file di pochi Kb.
La ciliegina sulla torta sarebbe riuscire a selezionare ed inviare anche le celle bloccate, ma comunque va già benissimo così.
Grazie ancora!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.