Istruzioni WHILE e LOOP

di il
15 risposte

Istruzioni WHILE e LOOP

Buonasera,

ho un pezzo di codice in VB che mi allega degli allegati ad una mail :

Private Sub Comando167_Click()

Dim destinatario As String
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)

With OutMail
 .To = Forms![MSC stato 2]![Sottomaschera ELENCOCOLLABORATORI].Form![Email]
 'CC =
 .Subject = "INVIO: CONTRATTI - DISPOSIZIONI E TEG " & Forms![MSC stato 2]![INTEST] & ""
 .Body = "Gentile, " & Forms![MSC stato 2]![Sottomaschera ELENCOCOLLABORATORI].Form![NOMEPROM] & "" & vbNewLine & "Si inviano in allegato:" & vbNewLine & "1)CONTRATTI" & vbNewLine & "2)DISPOSIZIONI" & vbNewLine & "3)TEG" & vbNewLine & "4)NUOVO ALLEGATO 4 DA FAR SOTTOSCRIVERE" & vbNewLine & "5)Allegato con le date da inserire nell'allegato 4"
.Attachments.Add ("\\SERVERHP\Documenti\impresa\UFFICIO FIDI\Disposizioni\2023\CONTRATTI FIRMATI\" & Forms![MSC stato 2]![INTEST] & " " & Format(Now, "dd-mm-yyyy") & " - IMPRESA.pdf")
.Attachments.Add ("\\SERVERHP\Documenti\impresa\UFFICIO FIDI\Disposizioni\2023\CONTRATTI FIRMATI\" & Forms![MSC stato 2]![INTEST] & " " & Format(Now, "dd-mm-yyyy") & " - SOCIO.pdf")
.Attachments.Add ("\\SERVERHP\Documenti\impresa\UFFICIO FIDI\Disposizioni\2023\TEG\TEG " & Forms![MSC stato 2]![INTEST] & " " & Format(Now, "dd-mm-yyyy") & ".pdf")
.Attachments.Add ("\\SERVERHP\Documenti\impresa\UFFICIO FIDI\Disposizioni\2023\TEG\Data Allegato 4 " & Forms![MSC stato 2]![INTEST] & ".pdf")
.Attachments.Add ("\\SERVERHP\db\STP Contratti\ALLEGATO4.pdf")

If Forms![MSC DISPOSIZIONI]![Sottomaschera IMPORTI MANUALI]![QUOTA DI CAPITALE SOCIALE].Value <> 0 Then
.Attachments.Add ("\\SERVERHP\Documenti\impresa\UFFICIO FIDI\Disposizioni\2023\COMPENSAZIONI\" & Forms![MSC DISPOSIZIONI]![INTEST] & "  " & Forms![MSC DISPOSIZIONI]![DESCRIZIONE FT] & "  " & Forms![MSC DISPOSIZIONI]![IMP FINANZIATO] & " COMPENSAZIONE" & ".pdf")
    
Else

    
    End If
    
    
 Dim p As String
 Dim X As String
 Dim s As String
 Dim c As String
 
 p = "\\SERVERHP\Documenti\impresa\UFFICIO FIDI\Disposizioni\2023\" 'individuo il percorso del file da allegare
 X = Forms![MSC stato 2]![INTEST].Value 'con X prendiamo il nome del campo SOCIO ad es. Pippo
 's = Dir("\\SERVERHP\Documenti\impresa\UFFICIO FIDI\##\Disposizioni\2019\" & "" & X & " " & "*.pdf")  'trova il primo nome file che inizia con Pippo
 s = Dir("\\SERVERHP\Documenti\impresa\UFFICIO FIDI\Disposizioni\2023\" & "" & X & " " & "*.pdf")  'trova il primo nome file che inizia con Pippo
    Do While s <> ""
        .Attachments.Add "\\SERVERHP\Documenti\impresa\UFFICIO FIDI\Disposizioni\2023\" & s
        s = Dir()
    Loop
    
 c = Dir("\\SERVERHP\Documenti\impresa\UFFICIO FIDI\Disposizioni\2023\COMPENSAZIONI\" & "" & X & " " & "*.pdf")
    Do While c <> ""
        .Attachments.Add "\\SERVERHP\Documenti\impresa\UFFICIO FIDI\Disposizioni\2023\COMPENSAZIONI\" & c
        c = Dir()
    Loop
    
 'p & "" & X & "*.pdf"
'.Send 'per inviare subito la mail
 .Display 'per aprire e controllare la mail prima di inviarla manualmente
 End With

Set OutMail = Nothing
 Set OutApp = Nothing


End Sub

15 Risposte

  • Re: Istruzioni WHILE e LOOP

    Il problema l'ho sul WHILE della stringa C

    mi allega per 2 volte lo stesso file. 

    Mi spiego: 

    Nella cartella “\\SERVERHP\Documenti\###UFFICIO FIDI\Disposizioni\2023\COMPENSAZIONI\”

    ho questi due file PDF:

    ###  ANTICIPO FATTURE  30000 COMPENSAZIONE.pdf

    ###  FACOLTA' DI SCOPERTO  60000 COMPENSAZIONE.pdf

    Se clicco il pulsante per allegare alla mail, il programma mi allega correttamente il file denominato ###  FACOLTA' DI SCOPERTO  60000 COMPENSAZIONE.pdf 

    mentre mi allega per due volte il file denominato

    ### ANTICIPO FATTURE  30000 COMPENSAZIONE.pdf

    Vorrei che me lo allegasse solo una volta. Cosa sbaglio?? 

    Considerate che per il WHILE della stringa S funziona tutto correttamente e il nome dei file ad esempio sono:

    ###  ANTICIPO FATTURE  30000.pdf

    ###  FACOLTA' DI SCOPERTO  30000.pdf

  • Re: Istruzioni WHILE e LOOP

    Non puoi evitare di mettere quei dati sensibili nel forum?

  • Re: Istruzioni WHILE e LOOP

    X l'autore del thread: ho dovuto ripassare il tuo post eliminando il nome della ditta…

    Prima di postare qualcosa devi fare attenzione a ripulirlo di nomi cognomi e qualsiasi altra informazione

  • Re: Istruzioni WHILE e LOOP

    Si scusate 

  • Re: Istruzioni WHILE e LOOP

    Sicuro che in quella cartella ci siano solo due file? Proprio soli due file?

  • Re: Istruzioni WHILE e LOOP

    Sicurissimo,l'ho creata appositamente per l'occasione e ho stampato i due pdf.

  • Re: Istruzioni WHILE e LOOP

    06/04/2023 - oregon ha scritto:


    Sicuro che in quella cartella ci siano solo due file? Proprio soli due file?

    ECCO LO SCREEN 

  • Re: Istruzioni WHILE e LOOP

    Nessuno che sa aiutarmi??? 

  • Re: Istruzioni WHILE e LOOP

    Per aiutarti bisognerebbe fare delle prove con il tuo codice ela tua cartella.

    Metti un

     Debug.Print c  

    subito dopo la while e controlla cosa viene visualizzato e quanti sono i file elencati

  • Re: Istruzioni WHILE e LOOP

    Ciao e grazie,

    ho messo quello che mi hai detto tu e mi trova SOLO un FILE (vedo un solo record “NOMEAZIENDA SRL  MUTUO CHIROGRAFARIO  15000 COMPENSAZIONE.pdf” ) nella finestra di debug sotto ma se vado a lanciare la macro per creare la mail e allegare.. mene allega 2 uguali

    c = Dir("\\nomeserver\Documenti\nomeazienda\UFFICIO FIDI\Disposizioni\2023\COMPENSAZIONI\" & "" & X & " " & "*.pdf")
        Do While c <> ""
        Debug.Print c
            .Attachments.Add "\\nomeserver\Documenti\nomeazienda\UFFICIO FIDI\Disposizioni\2023\COMPENSAZIONI\" & c
            c = Dir()
        Loop
  • Re: Istruzioni WHILE e LOOP

    Quindi in quella cartella hai solo un file.

    Fai lo stesso con l'altro while mettendo Debug.Print s

  • Re: Istruzioni WHILE e LOOP

    Pensavo, 

    può darsi che il problema è invece la IF che ho messo prima??

    If Forms![MSC DISPOSIZIONI]![Sottomaschera IMPORTI MANUALI]![QUOTA DI CAPITALE SOCIALE].Value <> 0 Then
    .Attachments.Add ("\\server\Documenti\Serv\UFFICIO FIDI\Disposizioni\2023\COMPENSAZIONI\" & Forms![MSC DISPOSIZIONI]![INTEST] & "  " & Forms![MSC DISPOSIZIONI]![DESCRIZIONE FT] & "  " & Forms![MSC DISPOSIZIONI]![IMP FINANZIATO] & " COMPENSAZIONE" & ".pdf")
        
    Else
    
        End If
        
        
     Dim p As String
     Dim X As String
     Dim s As String
     Dim c As String
     
     p = "\\server\Documenti\Serv\UFFICIO FIDI\Disposizioni\2023\" 'individuo il percorso del file da allegare
     X = Forms![MSC stato 2]![INTEST].Value 'con X prendiamo il nome del campo SOCIO ad es. Pippo
     's = Dir("\\server\Documenti\Serv\UFFICIO FIDI\Alessandra\Disposizioni\2019\" & "" & X & " " & "*.pdf")  'trova il primo nome file che inizia con Pippo
     s = Dir("\\server\Documenti\Serv\UFFICIO FIDI\Disposizioni\2023\" & "" & X & " " & "*.pdf")  'trova il primo nome file che inizia con Pippo
        Do While s <> ""
            .Attachments.Add "\\server\Documenti\Serv\UFFICIO FIDI\Disposizioni\2023\" & s
            s = Dir()
        Loop
        
     c = Dir("\\server\Documenti\Serv\UFFICIO FIDI\Disposizioni\2023\COMPENSAZIONI\" & "" & X & " " & "*.pdf")
        Do While c <> ""
        Debug.Print c
            .Attachments.Add "\\server\Documenti\Serv\UFFICIO FIDI\Disposizioni\2023\COMPENSAZIONI\" & c
            c = Dir()
        Loop
  • Re: Istruzioni WHILE e LOOP

    Mettendo il DEBUG anche in s mi appare cosi

    “NOMEAZIENDA S.R.L.  MUTUO CHIROGRAFARIO  15000 COMPENSAZIONE.pdfNOMEAZIENDA  S.R.L.  MUTUO CHIROGRAFARIO  15000.pdf”

    Nella cartella di S ho tantissimi PDF e quando capita che LA STESSA AZIENDA ha due pdf dentro…correttamente ne prende due e non solo uno

  • Re: Istruzioni WHILE e LOOP

    RISOLTO!!!

    era la IF che mi passava due volte lo stesso concetto.. prima la if e poi il while e così per forza mi caricava due volte lo stesso file

    ora così che ho integrato il WHILE nella IF tutto funziona correttamente : GRAZIE

    If Forms![MSC DISPOSIZIONI]![Sottomaschera IMPORTI MANUALI]![QUOTA DI CAPITALE SOCIALE].Value <> 0 Then
     c = Dir("\\SERVER\Documenti\Serv\UFFICIO FIDI\Disposizioni\2023\COMPENSAZIONI\" & "" & X & " " & "*.pdf")
        Do While c <> ""
            .Attachments.Add "\\SERVER\Documenti\Serv\UFFICIO FIDI\Disposizioni\2023\COMPENSAZIONI\" & c
            c = Dir()
        Loop
        Else
    
        End If
        
Devi accedere o registrarti per scrivere nel forum
15 risposte