allegare cartella anzichè file outlook



  • allegare cartella anzichè file - outlook
    di nichicanta data: 29/07/2013 13:53:57

    Carissimi amici, con il codice in allegato invio correttamente i file pdf elencati in una colonna del file di excel che utilizzo come contenitore di dati e indirizzi e-mail.
    Ho la necessità (poichè ho dovuto apportare alcune modifiche lavorative) di allegare la cartella che ha lo stesso nominativo (con all'interno più file pdf) e non i singoli file pdf.
    Ringrazio in anticipo chi volesse aiutarmi.
     
    Sub inviamail()
    Application.ScreenUpdating = False
    Dim OutApp As Object
    Dim EmailAddr As String
    Dim subj As String
    Dim BodyText As String
    Sheets("Foglio1").Select
    Columns("I:I").Select
    Selection.NumberFormat = "$ #,##0.00"
    'Range("I2:I6500").Activate
    'Range("I2:I6500").NumberFormat = "#.##0,00"
    Range("J2:J6500").NumberFormat = "mmmm/yyyy"
    Range("O:P").ClearContents
    rr = Range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To rr
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.Createitem(0)
    'On Error Resume Next
    With OutMail
    .To = Cells(i, 2)
    .cc = Cells(i, 3)
    .bcc = ""
    .Subject = Cells(i, 4)
    .body = "Si trasmette XXXXXXXXXXXXXXXXXXXXXXXXXXX." & _
    " Pertanto XXXXXXXXXXXXXXX" & " " & Cells(i, 8) & ":" & " " & Cells(i, 10) & "." & Chr(13) & _
    " Totale importo accreditato: € " & FormatNumber(Cells(i, 9), 2, , , -1) & _
    Chr(13) & Chr(13) & Space(28) & "d'ordine" & Chr(13) & " XXXXXXXXX" & Chr(13) & Space(19) & "XXXXXX" & _
    Chr(13) & Chr(13) & Chr(13) & Chr(13) & "Si prega di fornire, con stesso mezzo, cortese cenno di riscontro."
    
    
    'Cells(I, 5) & Trim(Cells(I, 8)) & " " & "Totale importo accreditato:"
    .Attachments.Add (Cells(i, 6) & Cells(i, 7))
    '.display questo comando visualizza la finestra del messaggio di outlook e in caso di
    ' invio di email multiple fa sfarfallare il monitor
    .send
    Application.SendKeys "%I" ' non fa uscire la finestra di Outlook che autorizza l'invio
    End With
    'On Error Resume Next 'con questo comando anche in caso di errore va avanti
    On Error GoTo ERRORE
    Cells(i, 15) = "INVIATA"
    Set OutMail = Nothing
    Set OutApp = Nothing
    Application.SendKeys "%I"
    Next i
    ERRORE:
    Cells(i, 16) = "ERRORE, NON INVIATA"
    MsgBox ("La mail non è stata inviata alla seguente finanziaria :") & Cells(i, 11).Value
    'If Cells(i, 16) = "ERRORE, NON INVIATA" Then
    'MsgBox ("mail non inviata a:") & ActiveCell.Offset(0, -6).Value
    'End If
    Application.ScreenUpdating = True
    Resume Next
    MsgBox ("Invio multimail completato")
    End Sub



  • di Textomb data: 30/07/2013 12:43:22

    non entro, per il momento, nel merito del codice scritto qui riportato.
    ma, in base alla mia esperienza, non credo fattibile allegare cartelle con all'interno file in un messaggio di posta con Outlook.
    Ho provato manualmente e mi dice che possono allegarsi solo file o oggetti e non cartelle...
    Verificherò altri suggerimenti dal forum al riguardo.



  • di nichicanta (utente non iscritto) data: 30/07/2013 12:59:13

    Grazie ancora textomb, se non fosse possibile è un guaio perchè si dovrebbe modificare il tuo codice che anzichè creare le cartelle con all'interno i files dovrebbe rinominare (con il nome della stessa finanziaria) i singoli fiel da allegare con il codice da me postato(che funziona perfettamente).
    Non abbandoniamo per favore questa discussione.
    P.S. invito altri untenti del forum per eventuali consigli o soluzioni alla problematica evidenziata.
    Vi saluto e resto in attesa di un vostro consiglio.



  • di Textomb data: 30/07/2013 16:35:38

    Ho visto il codice scritto qui sopra.
    A mio avviso le variabili OutApp e OutMail andrebbero settate fuori dal ciclo For.
    E poi alla fine del ciclo dopo il Next le spegni con il Nothing.
    Così com'è adesso lo fa ad ogni passaggio... lo fai sudare poverino.

    Per il resto, funziona bene.
    Per il problema della cartella da allegare alla e.mail resto della mia opinione...



  • di nichicanta (utente non iscritto) data: 30/07/2013 16:42:33

    Amici ho appreso dopo varie ricerche effettuate in rete che non è possibile allegare cartelle ai destinatari se non zippate con Winrar,Zip genius,Winzip ecc.
    Vi chedevo se c'era la possibilità tramite vba di poter comprimere, con winrar (poichè sul mio computer ho installato questo programma) le cartelle contenute all'interno di una cartella (che fa da contenitore principale) lasciando invariato il nome delle cartelle originali,
    Questo perchè, facendo una prova manuale, con il codice inviamail, dopo aver zippato il file con winrar, aver cambiato l'estensione del file da .pdf a.rar tutto funziona correttamente.
    Sarebbe l'ideale se questo avvenisse in automatico con una piccola modifica al codice del grande Textomb (sul forum chiamato: ricerca e copia dei file pdf in una cartella "x") che fa tutto questo ma crea cartelle nominative normali, ora ci vorrebbe invece un pezzo di codice che creasse queste cartelle zippate.
    Chiedo il vostro aiuto e consiglio per la definizione della problematica.
    Vi saluto.



  • di HarryBosch data: 30/07/2013 17:40:53

    Certo, te lo confermo anch'io, per quel che può valere. E del resto se provi ad allegare una cartella ad Outlook puoi verificare direttamente che non è possibile.
    Per quanto riguarda la compressione dei file all'interno di una cartella zippata, abbiamo già discusso di questa cosa. Prova a fare una ricerca sul Forum; eventualmente, vedo di preparare un esempio di codice appena posso, sempre che qualcun'altro non mi anticipi :)



  • di nichicanta (utente non iscritto) data: 30/07/2013 21:23:36

    Va bene amici, provo a trovare qualcosa nello storico delle discussioni e, nel caso vi faccio sapere.
    Caro Harry,Textomb se vi è possibile, nel codice di textomb magari riuscire a creare la cartella zippata con winrar, creata (efficacemente dal codice di textomb).
    Io cerco di darmi da fare nel forum e in rete per quello che posso, attendo nuove vostre soluzioni e proposte.
    Vi saluto e vi ringrazio.



  • di nichicanta (utente non iscritto) data: 31/07/2013 12:12:59

    Amici, con delle ricerche mirate in rete (nello storico delle discussioni non ho trovato nulla che avesse a che fare con questo argomento), ho trovato questo codice che dovrebbe fare quello da me richiesto, ma ho difficoltà ad applicarlo e a farlo partire per testarlo ( il codice per me è quasi incomprensibile, per questo vi chiedo la cortesia di commentarlo se è questo il passo giusto per risolvere la persente discussione ).
    mi affido alla vostar professionalità e competenza per valutare se abbiamo centrato l'obiettivo o meno.
    Vi saluto e vi auguro buona giornata.
     
    I sistemi operativi Microsoft da XP e successive versione permettono la gestione grafica dei file compressi dello standard .ZIP, tuttavia non vi è inclusa una utility da poter utilizzare da linea di comando e quindi automatizzare una procedura di compressione.
    In rete si trovano diversi script per creare file ZIP attraverso l'esecuzione di una procedura VBA.
     
    Qui di seguito elenco due tipologie di vbscript per produrre file zip:
     1. Riporto di seguito lo script per windows xp che produce file .ZIP.
     2. Creare il file crea_zip.vbs e copiarci il seguente codice:
     
    Option Explicit
    
    Const FOF_CREATEPROGRESSDLG = &H0&
    Dim sSourceFolder
    Dim sArchiveFile
    Dim oShell
    Dim oZIP
    Dim oSourceFolder
    
    'Settaggio Variabili
    sSourceFolder = "C:Test"
    sArchiveFile = "C:ip_Out.ZIP"
    
    Dim oFSO
    Dim oFile
    Dim iFiles
    Dim Fldr
    
    Set oFSO = CreateObject( "Scripting.FileSystemObject" )
    Set oFile = oFSO.OpenTextFile( sArchiveFile , 2, True )
    oFile.Write "PK" & Chr(5) & Chr(6) & String( 18, Chr(0) )
    oFile.Close
    Set oFile = Nothing
    Set oFSO = Nothing
    
    iFiles = 0
    
    With CreateObject("Shell.Application")
    
      'Copy the files to the compressed folder
      
     
       .NameSpace(sArchiveFile).CopyHere .NameSpace( sSourceFolder ).Items, FOF_CREATEPROGRESSDLG
    
      iFiles = iFiles + .NameSpace( sSourceFolder ).Items.Count
    
      'Keep script waiting until Compressing is done
      On Error Resume Next
      Do Until .NameSpace( sArchiveFile ).Items.Count = iFiles
       wScript.Sleep 1000
      Loop
      On Error GoTo 0
       
    End With
    
    
    
    Lo script esegue la creazione del file "C:ip_Out.ZIP" e lo riempie con i file della cartella "C:Test". 
    
    Tuttavia se all'interno di C:Test risultano cartelle vuote si potrebbe generare un errore.



  • di HarryBosch data: 31/07/2013 17:09:45

    La procedura è giusta. Ti allego un file con esempio funzionante che devi soltanto adattare al tuo scopo: questa procedura permette di scegliere i file da zippare, e la cartella di destinazione sarà la stessa del file Excel da dove lanci la routine.

    Ovviamente puoi gestire a piacere sia l'inserimento dei file (che nel tuo caso mi sembra non sia richiesta una finestra di dialogo), la cartella di destinazione, e il nome da assegnare.
    Ho inserito alcuni commenti che riguardano queste parti.

    Eventualmente, ti do una mano ad adattare se non riesci



  • di HarryBosch data: 31/07/2013 17:12:07

    Il codice l'ho tratto e adattatato in qualche punto, da uno dei vari esempi del "mitico" Ron de Bruin



  • di nichicanta (utente non iscritto) data: 31/07/2013 20:35:43

    Ciao Harry, innanzitutto grazie, come sempre per il tuo interessamento.
    Ho la necessità (al fine di non sprecare l'utilissimo e validissimo aiuto di Textomb) di zippare cartelle di lavoro e non singoli file, poiché il 90% del lavoro è già impostato, spero di essere molto chiaro e comprensibile nell'esporre quello che desidererei che tu realizzassi e cioè:
    1) scegliere le cartelle (all'interno di una e sola cartella che io chiamo FILE FINANZIARIE VARIE) già create, nominate e che contengono già i file pdf delle singole finanziarie, sono circa 300 file complessivi ( alle quali dopo aver realizzato questo codice invierò con Outlook le cartelle zippate).
    2) poiché l'operazione diventerebbe definitiva e consuetudinaria, il codice dovrebbe verificare( prima di procedere con la zippatura delle cartelle) se la cartelle di origine ( FILE FINANZIARIE VARIE) è vuota o contiene altre cartelle, perchè a questo punto dovrebbe eliminarle o sovrascrivere, magari con un msgbox che mi chiede di cancellarle o sovrascrivere.
    Harry, credimi questo è l'obiettivo finale e perfetto poiché ho provato ieri ( per simulare la realtà)a creare una cartella zippata con winrar, e ad inviarla con il programma inviamail alla relativa finanziaria e tutto è andato a buon fine.
    Cerco di essere il più possibile chiaro e comprensibile al fine di farti lavorare meglio con minor spreco di energie.
    Per ora vi saluto e resto in attesa di tue notizie in merito alla fattibilità di questa mia richiesta.



  • di nichicanta (utente non iscritto) data: 01/08/2013 13:11:57

    Caro Harry, sai darmi qualche informazione circa la possibilità di realizzare quello che ho richiesto ieri.
    Saluto tutti.



  • di HarryBosch data: 01/08/2013 23:56:57

    Si, ma non è facile scrivere un codice di questo tipo bello e pronto... ci devi mettere un pò del tuo per adattarlo. Se non si dispone di tutte le informazioni nessuno ti riuscirà mai a creare il codice "perfetto".
    All'inizio della discussione mi è parso di capire che i file da inviare sono elencati in una colonna del foglio; però adesso dovresti scegliere una cartella all'interno di un percorso ben preciso. Cosa vorresti realizzare, una Userform che ti chieda di selezionare la cartella o più cartelle da inviare?

    Una volta saputa questa informazione, si può sfruttare il codice nel file che ti ho allegato per ciclare la cartella e memorizzare ogni file contenuto all'interno.
    E' questo che devi fare?



  • di nichicanta (utente non iscritto) data: 02/08/2013 19:37:47

    Ciao Harry, in sintesi occorre fare questo, perché il codice da te postato, in parte già lo fà.
    con il codice inviamail riuscivo perfettamente ad inviare file pdf alle singole finanziarie dopo aver acquisito a scanner più fogli, li salvavo in un unico file pdf e lo rinominavo con il nominativo della rispettiva finanziaria.
    Successivamente, aprivo una nuova discussione e grazie al codice di Textomb sono riuscito a salvare direttamente tutti i singoli file delle rispettive finanziarie in cartelle che (riportavano il nome della finanziaria di riferimento e contenevano tutti i file della stessa).
    Cosi facendo non ho potuto più utilizzare il codice invia,mail perché come già postato Outlook non permette questo.
    Quindi, quello che vi chiedo è solo poter selezionare la cartella interessata e zipparla( sempre mantenendo il suo nome poiché le cartella da zippare riportano il nome delle relative finanziarie, e lasciandole sempre all'interno della cartella principale che fa da contenitore di tutte le cartelle da zippare).
    Mi spiego meglio e indico le procedure da realizzare:
    1)selezionare la cartella principale che fa da contenitore (salvata sul desktop o altrove, questo codice già lo hai postato e realizzato con il file allegato)
    2) anziché zipppare i singoli file , desidero che il codice mi permetta di scegliere se zippare i singoli file ( contenuti all'interno della cartella selezionata oppure zippare la stessa cartella selezionata, perché è proprio quest'ultima che devo zippare per poi inviarla, tramite il codice inviamail alle singole finanziarie).
    P.S. Ho fatto una prova a zippare una cartella con winrar, cambiare l'estensione del file da .pdf a .rar e ad inviarla con il codice inviamail e tutto ha funzionato perfettamente.
    Spero di essere stato chiaro amici, e tu carissimo Harry già hai realizzato( secondo il mio modestissimo parere gran parte di quello che sto cortesemente richiedendo a voi esperti, manca solo il codice che permetta di zippare cartelle e non singoli file).



  • di nichicanta (utente non iscritto) data: 02/08/2013 20:05:49

    "cit".Cosa vorresti realizzare, una Userform che ti chieda di selezionare la cartella o più cartelle da inviare?
    Si è proprio questo che desidero, con la possibilità di zippare le cartelle selezionate per poi inviarle alle singole finanziarie, mantenendo invariato il nome della cartella appena zippata e il percorso e la cartella principale aperta da userform e che contiene le cartelle da zippare.
    Buona sera a tutti Voi.



  • di nichicanta (utente non iscritto) data: 05/08/2013 20:48:37

    Buonasera amici, sono a chiedervi, per favore, di conoscere la possibilità di effettuare l'operazione richiesta al fine di poter inviare quanto di mio interesse alle finanziarie interessate.
    Sicuro ( fino ad oggi non ho avuto sempre il vostro prezioso aiuto) della vostra professionalità e competenza, colgo l'occasione per salutarvi cordialmente.



  • di HarryBosch data: 06/08/2013 12:16:42

    Ti allego una nuova revisione in base alla tua richiesta; ho inserito anche diversi commenti, così dovresti riuscire a capire il codice.

    Puoi scegliere se selezionare singoli file o cartelle intere da zippare: in entrambi i casi, la cartella compressa sarà salvata nello stesso percorso del file Excel da cui lanci la macro.

    Ora dovresti riuscire ad adattarlo al tuo caso; ti basta prendere questo percorso e allegarlo alla mail:
    .Attachments.Add percorso_zip



  • di nichicanta (utente non iscritto) data: 07/08/2013 19:13:03

    Grazie come sempre Harry, un'ultima cosa (se è possibile, altrimenti utilizzo questo codice ).
    C'è la possibilità di selezionare più cartelle con ctrl+click o shift +click (con il tuo codice non c'è questa possibilità) al fine di zipparle tutte contemporaneamente, poichè attualmente sono 31 cartelle e aumentano man mano che creo altre finanziarie) dalla finestra apri e seleziona file o cartelle?
    Un saluto a tutti gli amici del forum.



  • di nichicanta (utente non iscritto) data: 10/08/2013 18:22:35

    Cari amici, ritorno sulla discussione per conoscere se è possibile soddisfare la mia ultima richiesta, in caso contrario spunto su risolto e va bene cosi.
    Vi ringrazio in anticipo.
    Siete fantastici.