Sviluppare funzionalita su Microsoft Office con VBA allegare più file con una certa stringa ad una mail con vba

LoginRegistrati
Stai vedendo 19 articoli - dal 1 a 19 (di 19 totali)
  • Autore
    Articoli
  • #6715 Risposta

    mb
    Partecipante

      Buongiorno

      avrei bisogno del Vostro aiuto per un esigenza ho diverse versioni per inserire allegati ad una mail ma avrei piacere di fare meno "ginnastica" in questo caso.

       

      in una cartella prova ho molti file dello spesometro da inviare e nella cartella i file hanno un'estenzione finale che può essere F01 oppure F02

      non so però nel file allegato come fare a far fare un ciclo che mi estragga i nomi dei file e li alleghi tutti insieme

      faccio un ulteriore esempio

      201801.f01

      201802.f01

      201803.f01

      201801.f02

      201802.f02

      avrei la necessità che tutti i file f01 fossero allegati alla stessa mail

      spero di essere stato chiaro nella richiesta aiuto

      grazie

       

       

       

      #6717 Risposta

      mb
      Partecipante

        Per favore potete togliere il file allegato dovei sostituirlo ma non so come fare

         

        grazie

         

        #6718 Risposta

        vecchio frac
        Senior Moderator
          171 pts

          Ho rimosso l'allegato come richiesto 🙂

          #6719 Risposta

          mb
          Partecipante

            grazie

            vecchio frac

            questo è quello corretto

             

            Allegati:
            You must be logged in to view attached files.
            #6721 Risposta

            vecchio frac
            Senior Moderator
              171 pts

              mb wrote:avrei la necessità che tutti i file f01 fossero allegati alla stessa mail

              Crei un oggetto FileSystemObject che punti ai Files di una certa directory, con un ciclo For ... Next esamini i file contenuti nella cartella e consideri solo quelli la cui estensione è quella desiderata. Puoi anche costruire una piccola funzione che estrapoli l'estensione da un nome di file, così poi il confronto è banale.

              Quando sei di fronte a un file con l'estensione voluta, con un piccolo test If ... Then, ci fai quello che vuoi.

              Sono davvero poche righe di codice, prova a cimentarti nell'impresa e torna in caso di difficoltà 🙂

              #6722 Risposta

              mb
              Partecipante

                Grazie vecchio frac

                con questo trovo il 1 file

                mFolder = "e:\prova\"
                strFile = Dir(mFolder & "*.txt*")
                If strFile <> "" And _
                Left(strFile, 5) = "*.f01" Then

                end if

                 

                ma poi quando spedisco mi allega solo il primo

                .Attachments.Add ("e:\prova\" & strFile & "")

                può essere generata la mail con i 6 allegati con estensione F01 direttamente dalla sub o devo per forza utilizzare delle celle d'appoggio ??

                 

                e poi se usassi le celle d'appoggio rimane sempre il mio "problema" come faccio nella sub ad inserire tutti i file nella riga 

                .Attachments.Add ("e:\prova\" & strFile & "")

                potrei scrivere

                .Attachments.Add ("e:\prova\" & "*.f01* "")

                grazie

                 

                 

                 

                #6723 Risposta
                Marius44
                Marius44
                Moderatore
                  22 pts

                  Ciao

                  Vecchio Frac (che saluto) ha scritto

                  Crei un oggetto FileSystemObject che punti ai Files di una certa directory, con un ciclo For ... Next esamini i file contenuti nella cartella e consideri solo quelli la cui estensione è quella desiderata.

                  .....

                  Quando sei di fronte a un file con l'estensione voluta, con un piccolo test If ... Then, ci fai quello che vuoi.

                  Ciao,

                  Mario

                  #6724 Risposta

                  vecchio frac
                  Senior Moderator
                    171 pts

                    Va bene anche Dir (l'oggetto FileSystem è più flessibile) ma allora devi imbastire un do...loop altrimenti ti trova solo il primo file (forse).

                    Ho qualche (serio) dubbio sul fatto che l'istruzione Left(strFile, 5) = "*.f01" faccia quel che vorresti...

                    Confermo che non devi necessariamente utilizzare celle d'appoggio.

                    Infine non credo che puoi usare le wildcard con Attachments.Add.

                    Mettiti con pazienza a ragionare sullo spunto che ti ho dato e che Mario ha ribadito, l'oggetto FileSystem si crea con CreateObject come hai fatto con l'oggetto Outlook, al suo interno ci sono metodi e proprietà che fanno al caso tuo.

                    Comincia a stendere qualche riga in questa direzione, poi commentiamo insieme.

                     

                    #6727 Risposta

                    mb
                    Partecipante

                      help

                       

                      questo è quanto ho trovato su internet

                      però non sono riuscito a capire dove indico la directory dove sono i file con estensione F01 da spostare nella directory c:\testdirectory ??

                       

                      i miei file sono nella directory e:\origine1

                       ------------------------------------------------------------------------------------------------

                      Per copiare file con un criterio specifico in una directory
                      Usare il metodo GetFiles per restituire l'elenco dei file. In questo esempio vengono restituiti tutti i file RTF nella directory specificata.

                      VBCopia
                      For Each foundFile As String In My.Computer.FileSystem.GetFiles(
                      My.Computer.FileSystem.SpecialDirectories.MyDocuments,
                      Microsoft.VisualBasic.FileIO.SearchOption.SearchTopLevelOnly, "*.rtf")

                      Usare il metodo CopyFile per copiare i file. In questo esempio i file vengono copiati nella directory denominata testdirectory.

                      VBCopia
                      My.Computer.FileSystem.CopyFile(foundFile, "C:\testdirectory\" & My.Computer.FileSystem.GetName(foundFile))

                      Chiudere l'istruzione For con un'istruzione Next .

                      VBCopia
                      Next

                       ecc....

                      --------------------------------------------------------------------------------------

                      grazie

                       

                      #6729 Risposta

                      mb
                      Partecipante

                        risolto il primo problema

                        Sub CopiaFile()
                        Dim fs
                        Set fs = CreateObject("Scripting.FileSystemObject")
                        fs.copyfile "e:\origine1\*.F01", "e:\z\", True
                        Set fs = Nothing
                        End Sub

                        adesso i file con estensione F01 sono nella cartella Z del disco E del mio computer

                         

                        adesso come faccio a far eseguire una mail che spedisca tutti gli allegati della cartella Z 

                         

                        #6730 Risposta

                        vecchio frac
                        Senior Moderator
                          171 pts

                          mb wrote:For Each foundFile As String In My.Computer.FileSystem.GetFiles

                          Non è esattamente VBA 🙂

                          Comunque il passaggio alla directory di appoggio E:\Z non è necessario.

                          In ogni caso adesso nella routine che crea il messaggio Outlook devi implementare un altro ciclo For ... Next che prenda i file della cartella E:\Z e li appiccichi con l'istruzione che conosci Attachments.Add all'oggetto MailItem che stai per spedire.

                          #6733 Risposta

                          vecchio frac
                          Senior Moderator
                            171 pts

                            Ok, poi non ditemi che sono cattivo 🙂

                            Propongo una tra le soluzioni. 

                            Nota l'uso di Option Explicit in testa al modulo e l'assegnazione di eMail di un oggetto MailItem che, non essendo referenziato in Excel, va esplicitato con il suo valore (0) e non con il suo nome di costante Outlook.

                            Option Explicit
                            
                            Sub InviaMailf01()
                            Dim fso As Object, ffiles As Object, ffile As Object
                            Dim eApp As Object
                            Dim eMail As Object
                                
                                Set eApp = CreateObject("Outlook.Application")
                                Set eMail = Outlook.CreateItem(0)  'olMailItem
                                
                                Set fso = CreateObject("Scripting.FileSystemObject")
                                Set ffiles = fso.getfolder("e:\prova").Files
                                
                                For Each ffile In ffiles
                                    If get_ext(ffile.Name) Like "f01" Then eMail.Attachments.Add ffile
                                Next
                                
                                With eMail
                                    .To = "mb@xxx.com"    '<--- INSERISCI L'INDIRIZZO.
                                    .Subject = "riepilogo file"    '<--- INSERISCI L'OGGETTO DELLA MAIL.
                                    .Body = ""    '<--- INSERISCI IL TESTO.
                                    .Display
                                End With
                                
                                Set ffile = Nothing
                                Set ffiles = Nothing
                                Set fso = Nothing
                            End Sub
                            
                            
                            Public Function get_ext(f As String) As String
                            'restituisce l'estensione di un nome di file passato come stringa
                                If f = "" Then
                                    get_ext = ""
                                Else
                                    get_ext = Split(f, ".")(UBound(Split(f, ".")))
                                End If
                            End Function
                            
                            #6735 Risposta

                            mb
                            Partecipante

                              grazie vecchio frac non sei come tu ti definisci, anzi sei molto disponibile

                              lunedì provo in ufficio con i file effettivi, perchè con i file che ho simulato a casa non ha funzionato

                              nella cartella ho inserito dei file di tipo TXT ma con i seguenti nomi

                              pippo.f01

                              pluto.f01

                              ma non sono stati inseriti nella mail come allegati

                               

                              proverò

                              grazie per la tua pazienza

                              buona notte

                               

                              #6737 Risposta

                              vecchio frac
                              Senior Moderator
                                171 pts

                                Io ho Outlook solo in ufficio quindi anch'io dovrò testare meglio il codice sul campo.

                                A occhio sembra tutto corretto, ma bisognerebbe farlo girare.

                                #6746 Risposta

                                mb
                                Partecipante

                                  Buongiorno

                                   

                                  sicuramente sono io che sbaglio, ma ho provato anche in ufficio ma non allega nessun file

                                  ti confermo che i file terminano con .f01 e sono 6 uno per ogni mese quindi

                                  201801.f01

                                  201802.f01

                                  201803,f01

                                  201804.f01

                                  ecc

                                   

                                   

                                  #6747 Risposta

                                  vecchio frac
                                  Senior Moderator
                                    171 pts

                                    Infatti ho fatto una serie di errori 🙂

                                    Ecco le correzioni.

                                    Option Explicit
                                    
                                    Sub InviaMailf01()
                                    Dim fso As Object, ffiles As Object, ffile As Object
                                    Dim eApp As Object
                                    Dim eMail As Object
                                        
                                        Set eApp = CreateObject("Outlook.Application")
                                        Set eMail = eApp.CreateItem(0)  'olMailItem
                                        
                                        Set fso = CreateObject("Scripting.FileSystemObject")
                                        Set ffiles = fso.getfolder("j:\test").Files
                                        
                                        For Each ffile In ffiles
                                            If get_ext(ffile.Name) Like "f01" Then eMail.Attachments.Add CStr(ffile)
                                        Next
                                        
                                        With eMail
                                            .To = "mb@xxx.com"    '<--- INSERISCI L'INDIRIZZO.
                                            .Subject = "riepilogo file"    '<--- INSERISCI L'OGGETTO DELLA MAIL.
                                            .Body = ""    '<--- INSERISCI IL TESTO.
                                            .Display
                                        End With
                                        
                                        Set ffile = Nothing
                                        Set ffiles = Nothing
                                        Set fso = Nothing
                                    End Sub
                                    
                                    
                                    Public Function get_ext(f As String) As String
                                    'restituisce l'estensione di un nome di file passato come stringa
                                        If f = "" Then
                                            get_ext = ""
                                        Else
                                            get_ext = Split(f, ".")(UBound(Split(f, ".")))
                                        End If
                                    End Function
                                    #6748 Risposta

                                    vecchio frac
                                    Senior Moderator
                                      171 pts

                                      Chiaramente invece di

                                      Set ffiles = fso.getfolder("j:\test").Files

                                      devi specificare la cartella da cui prelevare i singoli file.

                                      #6749 Risposta

                                      mb
                                      Partecipante

                                        Grande

                                         

                                        ti ringrazio per l'aiuto e vado a studiare ....

                                         

                                        alla prossima

                                         

                                        #6750 Risposta

                                        mb
                                        Partecipante

                                          Risolto

                                           

                                        LoginRegistrati
                                        Stai vedendo 19 articoli - dal 1 a 19 (di 19 totali)
                                        Rispondi a: allegare più file con una certa stringa ad una mail con vba
                                        Gli allegati sono permessi solo ad utenti REGISTRATI
                                        Le tue informazioni:



                                        vecchio frac - 2750 risposte

                                        albatros54
                                        albatros54 - 1009 risposte

                                        patel
                                        patel - 937 risposte

                                        Marius44
                                        Marius44 - 797 risposte

                                        Luca73
                                        Luca73 - 685 risposte