Allegato con nome parziale



  • Allegato con nome parziale
    di Carletto (utente non iscritto) data: 01/07/2015 11:16:49

    Ciao a tutti!
    Avrei bisogno del vostro aiuto per una piccola modifica al codice del file allegato.
    In pratica mando una serie di mail in base al codice cliente, ognuna con un allegato (nello specifico, una mail precedente) che varia in base al codice stesso.
    Il problema risiede nel fatto che l'allegato non è rinominato SOLO con il codice del cliente (nel qual caso non avrei problemi), ma con un nome che contiene anche il codice.
    Ho provato ad inserire degli asterischi del codice ma non ho avuto fortuna.
    Mi potete aiutare?
    Grazie a tutti in anticipo!



  • di Vecchio Frac data: 01/07/2015 11:54:36

    Bisognerebbe sapere qual è il nome vero dell'allegato (cioè il file .msg), comprensivo del suo percorso, da inserire nella mail.
    Cioè: nel caso del primo cliente del tuo allegato, l'allegato è "C:UsersCarlettoDesktop111.msg" o il nome del file .msg è diverso?
    Perchè se contenesse solo il codice cliente, sarebbe facile:
    allegato = Cells(2, 12) & Cells(j, 1) & ".msg"
    Ma temo che non sia così :)





  • di Carletto (utente non iscritto) data: 01/07/2015 12:02:15

    Ciao Vecchio Frac,
    effettivamente il nome del file da allegare è sempre qualcosa del tipo "R contesazione cl 111 del 27/6/2015.msg".
    In ogni caso ci sono sempre dei caratteri prima e dopo il codice del cliente. Il percorso dove si trova il file invece non cambia mai.
    So che rinominando i file da allegare risolverei il problema, ma l'ideale per me sarebbe trovare una soluzione che mi consenta di non rinominarli, visto che sono veramente tanti nel caso reale a cui devo applicare questa macro.
    Si può fare qualcosa secondo te?
    Grazie mille



  • di Vecchio Frac data: 01/07/2015 14:23:51

    Sì, si può fare, l'importante è che il percorso non cambi.
    "In ogni caso ci sono sempre dei caratteri prima e dopo il codice del cliente" ---> caratteri diversi da spazio? Esempio valido: "R contestazione cl 111 del 27/6/2015.msg" e "R contestazione cl111 del 27/6/2015.msg" sono due cose diverse e, per la costruzione del codice sottostante, la distinzione è importante.





  • di Carletto (utente non iscritto) data: 01/07/2015 14:33:44

    Ancora una volta grazie Vecchio Frac,
    potrebbe capitare il verificarsi di entrambe le situazioni, quindi sia spazi sia altri caratteri.
    La soluzione ideale contempla entrambi i casi, ma già se si riuscisse a risolvere l'eventualità che il codice sia preceduto e seguito da spazi sarebbe un bellissimo passo avanti.
    Tnx



  • di Vecchio Frac data: 01/07/2015 14:50:01

    cit. "potrebbe capitare il verificarsi di entrambe le situazioni, quindi sia spazi sia altri caratteri."
    ---> Non è una buona cosa. A meno di non essere arcisicuro che il file .msg con il codice cliente compaia una volta soltanto nella cartella nel qual caso possiamo ancora cavarcela... ma non è una procedura esente da errori.





  • di Carletto (utente non iscritto) data: 01/07/2015 15:03:54

    Sicuramente a ogni cliente corrisponderà uno e un solo messaggio da allegare.
    Non voglio farti impazzire né abusare del tuo tempo, perciò davvero potrebbe essere un ottimo compromesso risolvere il mio problema nel caso che il codice all'interno del nome del file sia preceduto e seguito da spazi.
    Grazie di nuovo



  • di Vecchio Frac data: 01/07/2015 15:06:55

    Una proposta.

     
    Option Explicit
    
    Sub Invia_Click()
    Dim mail As String
    Dim ccmail As String
    Dim allegato As String
    Dim j As Integer
    Dim conta As Integer
    Dim rng As Range
    
    Dim fso As Object, f As Object
    
        Range("R2:R10000").ClearContents
    
        Set fso = CreateObject("Scripting.FileSystemObject")
        
        j = 2
        
         While Trim(Cells(j, 2)) <> ""
            conta = Application.WorksheetFunction.CountIf(Range("A:A"), Cells(j, 1))
            Set rng = Range(Cells(j, 1), Cells((j + conta - 1), 8))
            mail = Cells(j, 9)
            ccmail = Cells(j, 10)
            
            allegato = ""
            For Each f In fso.GetFolder(Cells(j, 12)).Files
                If UBound(Split(f.Name, Cells(j, 1))) > 0 Then
                    'soltanto il primo file che contiene il codice cliente viene tenuto buono
                    allegato = f.Name
                    Exit For
                End If
            Next
            
            If allegato <> "" Then
                Call Inviamail(mail, ccmail, allegato, j, conta, Union(Range("A1:H1"), rng))
            End If
                    
            j = j + conta
         Wend
         
         Set fso = Nothing
         Set f = Nothing
    End Sub
    






  • di Vecchio Frac data: 01/07/2015 15:10:45

    cit. "nel caso che il codice all'interno del nome del file sia preceduto e seguito da spazi"

    ---> Se sarai sicuro di mettere uno spazio prima e uno spazio dopo, allora potrai usare InStr invece di Split.
     

     
            allegato = ""
            For Each f In fso.GetFolder(Cells(j, 12)).Files
                If InStr(f.Name, " " & Cells(j, 1) & " ") > 0 Then
                    'viene recuperato il nome di file che contiene esattamente " < cod cliente > "
                    allegato = f.Name
                    Exit For
                End If
            Next






  • di Carletto (utente non iscritto) data: 01/07/2015 15:39:04

    Ciao Vecchio Frac,
    ho provato il codice in entrambe le varianti, è tutto perfetto, grazie davvero infinite, non deludi mai!