cercare file con nome parziale



  • cercare file con nome parziale
    di David (utente non iscritto) data: 28/07/2017 10:56:44

    Buongiorno a tutti,

    ho un problema riguardante la possibilità di allegare un file in Outlook tramite pulsante e relativa macro su foglio di Excel. Se utilizzo il file attivo non ho problemi. Ma se voglio allegare il file salvato con un altro pulsante e che combina il valore di una cella ("pippo" è il valore immesso) con la data ed ora, del tipo "pippo dd-mm-yyyy_hh.ss.xls" non riesco a far partire l'azione correttamente perché non conosco l'istruzione o comando che mi dica di allegare il file "pippo*.xls". Allego la macro utilizzata. Ovviamente questo tipo di ricerca file può essere utile anche in altri frangenti, come ricercare cartelle, catalogare files ecc.
    Grazie anticipatamente a tutti quanti vorranno partecipare
     
    Sub Pulsante380_Click()
    
    Dim appOL As New Outlook.Application
    Dim creaEmail As Outlook.MailItem
    
    Set creaEmail = appOL.CreateItem(olMailItem)
    
    With creaEmail
    .To = "picodepaperis@pluto.com"
    .Subject = "Invio Offerta"
     Dim p As String
     Dim X As String
      
     p = ActiveWorkbook.Path
     X = Sheets(2).[B3].Value 'con X prendiamo il nome Pippo
     
         If p & "" & X & DataOra & ".xls" = "" Then
        .Attachments.Add p & "" & "CartellaAttiva.xls"
         Else
        .Attachments.Add p & "" & X & ??????? & ".xls"
        End If
        
    '.Save
    .Display
    End With
    
    'Pulizie
    Set appOL = Nothing
    Set creaEmail = Nothing
    
    End Sub



  • di Vecchio Frac data: 28/07/2017 13:57:03

    Potresti utilizzare Dir() per restituire il primo file che corrisponde al criterio, nella cartella desiderata.
    Quindi supponendo che ci siano più file che iniziano con pippo, il comando
    s = Dir(ActiveWorkbook.Path & "pippo*.xls"
    assegna alla variabile "s" il nome del primo file che comincia per "pippo", ha estensione "xls" e si trova nel percorso specificato da ActiveWorkbook.Path.
    Nel tuo codice non è chiaro cosa sia "DataOra" (un range? una stringa? un oggetto?).
    Inoltre l'istruzione
    If p & "" & X & DataOra & ".xls" = "" Then
    è concettualmente sbagliata perchè la condizione non verrà mai verificata e darà sempre False, per cui verrà sempre eseguito quanto segue l'Else. Cioè stai dicendo a Excel: "verifica se la stringa composta da p, la barra rovescia, la X, il contenuto di DataOra (qualsiasi cosa sia) e ".xls" è uguale a una stringa vuota": il che palesemente non sarà mai vero.





  • di David (utente non iscritto) data: 28/07/2017 15:32:31

    Ciao Vecchio Frac,

    grazie per la risposta. La variabile DataOra è un refuso. Sorry. Adesso provo questa funzione e ti saprò dire qualcosa.

    Saluti

    David



  • di David (utente non iscritto) data: 28/07/2017 16:22:32

    Ciao Vecchio Frac,

    ho usato la funzione Dir () ma non so se la sto usando in maniera corretta. Trascrivo il codice. Mi rimanda un errore di run-time specificando che è impossibile trovare il file e di verificare che il percorso ed il nome file siano corretti. Nella cartella del file attivo si trova il file salvato che è così denominato: pippo 28-07-2017_15.36.36.xls.

    Se hai qualche indicazione da darmi ti ringrazio ancora.
    Saluti

    David
     
    Sub Pulsante380_Click()
    Dim appOL As New Outlook.Application
    Dim creaEmail As Outlook.MailItem
    
    
    Set creaEmail = appOL.CreateItem(olMailItem)
    
     
    
    With creaEmail
     .To = "picodepaperis@pluto.com"
     .Subject = "Invio Offerta"
     Dim p As String
     Dim X As String
     Dim s As String
     
     p = ActiveWorkbook.Path 'individuo il percorso del file da allegare
     X = Sheets(2).[B3].Value 'con X prendiamo il nome della cella B3 del foglio 2 ad es. Pippo
     s = Dir(ActiveWorkbook.Path & "" & X & " " & "*.xls") 'trova il primo nome file che inizia con Pippo
     
         If s <> "" Then            'se la variabile s viene trovata
        .Attachments.Add s       'p & "" & X & "*.xls" è l'alternativa. allega il file trovato
         Else
        .Attachments.Add p & "" & "Calcolo Offerta RSA-CDC.xls"         'allega il file attivo
        
        End If
    '.Save
    .Display
    
    End With
    
    'Pulizie
    Set appOL = Nothing
    Set creaEmail = Nothing
    
    End Sub



  • di Vecchio Frac data: 28/07/2017 19:31:35

    A prima vista non mi sembra sbagliato, ho fatto un veloce test e dovrebbe funzionare; su quale riga esattamente ti viene dato errore?





  • di David (utente non iscritto) data: 28/07/2017 20:55:14

    Il debug mi inchioda nel ciclo if, al comando then. Sostanzialmente non riconosce s come percorso ed ora che ci penso presumo che proprio s non sia riconosciuto. Infatti non finisce neppure il ciclo if ma esce in errore. Considera che precedentemente, col salvataggio del file attivo Calcola Offerta CDC-RSA.xls senza alcun ciclo if mi apriva Outlook e mi allegata il file attivo senza problemi. Non esseno però un programmatore esperto (ho solo reminiscenze dell'università ) non riesco a capire cosa non vada. Sicuramente non ho settato bene alcuni parametri oppure non li ho usati bene. Ma non so come fare se non reimmergendomi nel vba .
    Cia e grazie.
    David



  • di Vecchio Frac data: 28/07/2017 21:49:45

    Rituffarti in VBA non ti farà che bene :)
    Quel .Attachments.Add s non basta perchè in "s" hai solo il nome del file trovato, non l'intero percorso, che è necessario. Cambia con:
    .Attachments.Add p & "" & s
    e vedrai che funziona ^_^






  • di David (utente non iscritto) data: 28/07/2017 22:58:38

    Vecchio Frac grazie 1000. Scusa se rispondo come prima dal telefono ma ho il PC aziendale off-line e non lo collego al wifi di casa. Ho inserito la tua modifica e intanto mi davo del babao! Come pensavo il mio errore era considerare che la funzione dir () restituisse nome e percorso. Invece no. Come è giusto che sia. Comunque grazie ancora e grazie al forum che è davvero bello grazie a persone come te che aiutano gli altri. Ho spuntato " caso risolto" come è giusto che sia. Buona serata.
    David