Creare nomi dinamici a degli elenchi

Anonimo
2023-03-15T15:24:13+00:00

Ciao a tutti, non so se è possibile fare quanto sto per chiedere. Nel file che potete scaricare da qui, creato da Norman, creo dei dei file in pdf, in base al gruppo selezionato. Quello che mi servirebbe, è poter usare il nome riportato nella riga 1. In sostanza, invece di avere nella convalida dati nel foglio3 in K3 i nomi gruppo1. gruppo2 e ...., vorrei avere i nomi riportati nella riga 1 che possono essere cambiati. Questo mi permetterebbe di capire meglio il gruppo che gli appartiene e che devo convertire in Pdf.

Spero di essere riuscito a spiegare bene quello che mi servirebbe. Grazie per l'attenzione che mostrerete.

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2023-03-17T00:27:43+00:00

Ciao Geacs,

Ciao Norman,

Ho provato il codice, e solo il primo dei nominativi riporta nella cella C3 Foglio3 il nome corretto. Tutti gli altri riportano il nome del primo nominativo. A me servirebbe che tutti i file, nella cella C3 del foglio3 riporta lo stesso nome dato al file creato. Faccio un esempio se può rendere meglio la mia richiesta. Seleziono ad esempio il nome Michele il primo file creato prende il nome nominativo1 e nella cella C3 riporta nominativo1. Crea il secondo file nominativo2 e nella cella C3 riporta nominativo2. La stessa cosa, dev'essere fatto per i file che seguono nominativo3 il nome del file, nella C3 riporterà nominativo3, a seguire tutti gli altri.

Come avrai capito, ho faticato a capire le tue esigenze!

Tuttavia, se la tua intenzione fosse quella di creare un file PDF separato per ogni nominativo nel gruppo selezionato nella cella a tendina K3 del foglio Foglio3 e registrare il relativo nominativo nella cella C3 di ciascun file PDF, prova a sostituire il mio codice con la seguente versione:

'========>>

Option Explicit

'-------->>

Public Sub Tester2()

Dim WB As Workbook 

Dim SH\_Convalida As Worksheet, SH\_Gruppi As Worksheet 

Dim Rng\_Convalida As Range, Rng\_Gruppo As Range, Rng\_PDF As Range, rNominativo As Range 

Dim rCell As Range 

Dim sGruppo As String, sNominativo As String 

Dim Res As Variant, Res2 As Variant 

Dim iCtr As Long 

Const sFoglio\_Convalida As String = **"Foglio3"                  '<<=== Modifica** 

Const sFoglio\_Gruppi As String = **"Foglio2"                       '<<=== Modifica** 

Const sCella\_Convalida As String = **"K3"                            '<<=== Modifica** 

Const sPercorso As String = **"C:\Test\"                              '<<=== Modifica** 

Set WB = ThisWorkbook 

With WB 

    Set SH\_Convalida = .Sheets(sFoglio\_Convalida) 

    Set SH\_Gruppi = .Sheets(sFoglio\_Gruppi) 

End With 

With SH\_Convalida 

    sGruppo = .Range(sCella\_Convalida).Value 

    Set Rng\_PDF = .UsedRange 

End With 

With SH\_Gruppi 

    Set rNominativo = .Range("A1").CurrentRegion.Rows(1).Find(What:=sGruppo, \_ 

        After:=.Cells(1), \_ 

        Lookat:=xlWhole, \_ 

        LookIn:=xlFormulas, \_ 

        SearchOrder:=xlByRows, \_ 

        SearchDirection:=xlPrevious, \_ 

        MatchCase:=False) 

End With 

With rNominativo 

    Set Rng\_Gruppo = SH\_Gruppi.Range(.Offset(1), .End(xlDown)) 

End With 

Res = Dir(sPercorso, vbDirectory) 

If Res = vbNullString Then 

    MkDir sPercorso 

End If 

Res2 = Dir(sPercorso & sGruppo, vbDirectory) 

If Res2 = vbNullString Then 

    MkDir sPercorso & sGruppo 

End If 

For Each rCell In Rng\_Gruppo.Cells 

    iCtr = iCtr + 1 

    With rCell 

        sNominativo = .Value 

        SH\_Convalida.Range("C3").Value = sNominativo 

        If Not IsEmpty(.Value) Then 

            Call Crea\_PDF(Rng\_PDF, sPercorso & "\" & sGruppo & "\" & sNominativo) 

        End If 

    End With 

Next rCell 

Call MsgBox(Prompt:="Fatto", \_ 

    Buttons:=vbInformation, \_ 

    Title:="REPORT") 

End Sub

'--------->>

Public Sub Crea_PDF(Rng As Range, sName As String)

Rng.ExportAsFixedFormat \_ 

    Type:=xlTypePDF, \_ 

    Filename:=sName & ".pdf", \_ 

    Quality:=xlQualityStandard, \_ 

    IncludeDocProperties:=True, \_ 

    IgnorePrintAreas:=True, \_ 

    OpenAfterPublish:=False 

End Sub

'<<========

Potresti scaricare il mio file di prova Geacs_20230316.xlsm

Con riferimento a questo file, se nella tendina della cella K3 di Foglio3 è stato selezionato il nome del gruppo Alfredo, verrà creata, se non esiste già, una directory C:\Test\Alfredo e il primo file PDF salvato in questa directory sarà denominato Nominativo71 .pdf e questo nominativo verrà visualizzato in quel file:

        [![Immagine](https://learn-attachment.microsoft.com/api/attachments/73d9ddbd-86d2-467b-90d1-58b27a3a926e?platform=QnA

Allo stesso modo, il decimo file creato in quella directory sarà denominato Nominativo80.pdf e questo file visualizzerà il relativo nominativo:

       [![](https://learn-attachment.microsoft.com/api/attachments/0acaacf1-a62f-4554-94d0-c00d882640dd?platform=QnA

Un comportamento simile si può osservare per qualsiasi directory creata dal codice dopo una modifica del nome del gruppo selezionato nella cella K3 del Foglio3; i file in questa directory saranno nominati ciascuno in accordo con i membri costitutivi del gruppo e ogni file riporterà il relativo nominativo.

===

Regards,

Norman

Immagine

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

7 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2023-03-16T09:56:05+00:00

    Ciao Norman,

    Adesso crea i file in pdf, e riporta i nomi di tutti i valori riportati sotto il nominativo selezionato.

    Puoi fare in modo che i nominativi che crea, vengono riportati anche nella cella C3? In questo modo, il file creato quando lo apro riporta lo stesso nome.

    Grazie come sempre per la pazienza che manifesti.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2023-03-16T01:28:16+00:00

    Ciao Geacs,

    Ciao Norman,

    Innanzitutto grazie per l'attenzione. Mi sono spiegato male, per questa ragione ho aggiornato il file che puoi scaricare da qui. Come puoi notare, ho cambiato i nomi nella prima riga del Foglio2. Nel Foglio3, nella convalida dati riportata nella cella K3 compaiono i nomi della prima riga del Foglio2. Selezionando il nominativo della convalida dati, mi deve creare l'elenco che segue nella colonna del foglio2. Esempio pratico: seleziono Gionatan, mi crea il pdf dei nomi riportati nel Foglio2 da D2 all'ultima riga piena della colonna D. Mi crea una cartella che riporta i file creati e alla cartella gli da il nome di Gionatan. La stessa cosa deve accadere se scelgo il nome di un'altra colonna. Spero di aver semplificato la mia richiesta.

    Se nessuno, romano o altro, ha precedentemente requisito la seguente espressione, la rivendicherò per conto mio:

    Nella vita, ci sono poche maggiori fonti inutili di problemi dell'incapacità di un uomo di comprendere i bisogni dei suoi simili.

    😒

    Quindi, prova a sostituire il mio codice precedente con la seguente versione

    '========>>

    Option Explicit

    '-------->>

    Public Sub Tester2()

    Dim WB As Workbook 
    
    Dim SH\_Convalida As Worksheet, SH\_Gruppi As Worksheet 
    
    Dim Rng\_Convalida As Range, Rng\_Gruppo As Range, Rng\_PDF As Range, rNominativo As Range 
    
    Dim rCell As Range 
    
    Dim sGruppo As String, sNominativo As String 
    
    Dim Res As Variant, Res2 As Variant 
    
    Const sFoglio\_Convalida As String = **"Foglio3"                   '&lt;&lt;=== Modifica** 
    
    Const sFoglio\_Gruppi As String = **"Foglio2"                        '&lt;&lt;=== Modifica** 
    
    Const sCella\_Convalida As String = **"K3"                              '&lt;&lt;=== Modifica** 
    
    Const sPercorso As String = **"C:\Test\"                                '&lt;&lt;=== Modifica** 
    
    Set WB = ThisWorkbook 
    
    With WB 
    
        Set SH\_Convalida = .Sheets(sFoglio\_Convalida) 
    
        Set SH\_Gruppi = .Sheets(sFoglio\_Gruppi) 
    
    End With 
    
    With SH\_Convalida 
    
        sGruppo = .Range(sCella\_Convalida).Value 
    
        Set Rng\_PDF = .UsedRange 
    
    End With 
    
    With SH\_Gruppi 
    
        Set rNominativo = .Rows(1).Find(What:=sGruppo, \_ 
    
            After:=.Cells(1), \_ 
    
            Lookat:=xlWhole, \_ 
    
            LookIn:=xlFormulas, \_ 
    
            SearchOrder:=xlByRows, \_ 
    
            SearchDirection:=xlPrevious, \_ 
    
            MatchCase:=False) 
    
    End With 
    
    With rNominativo 
    
        Set Rng\_Gruppo = SH\_Gruppi.Range(.Offset(1), .End(xlDown)) 
    
    End With 
    
    Res = Dir(sPercorso, vbDirectory) 
    
    If Res = vbNullString Then 
    
        MkDir sPercorso 
    
    End If 
    
    Res2 = Dir(sPercorso & sGruppo, vbDirectory) 
    
    If Res2 = vbNullString Then 
    
        MkDir sPercorso & sGruppo 
    
    End If 
    
    For Each rCell In Rng\_Gruppo.Cells 
    
        With rCell 
    
            sNominativo = .Value 
    
            If Not IsEmpty(.Value) Then 
    
                Call Crea\_PDF(Rng\_PDF, sPercorso & "\" & sGruppo & "\" & sNominativo) 
    
            End If 
    
        End With 
    
    Next rCell 
    
    Call MsgBox(Prompt:="Fatto", \_ 
    
        Buttons:=vbInformation, \_ 
    
        Title:="REPORT") 
    

    End Sub

    '--------->>

    Public Sub Crea_PDF(Rng As Range, sName As String)

    Rng.ExportAsFixedFormat \_ 
    
    Type:=xlTypePDF, \_ 
    
    Filename:=sName & ".pdf", \_ 
    
    Quality:=xlQualityStandard, \_ 
    
    IncludeDocProperties:=True, \_ 
    
    IgnorePrintAreas:=True, \_ 
    
    OpenAfterPublish:=False 
    

    End Sub

    '<<========

    Ho aggiornato il mio file di prova Geacs20230315.xlsm

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2023-03-15T19:11:00+00:00

    Ciao Norman,

    Innanzitutto grazie per l'attenzione. Mi sono spiegato male, per questa ragione ho aggiornato il file che puoi scaricare da qui. Come puoi notare, ho cambiato i nomi nella prima riga del Foglio2. Nel Foglio3, nella convalida dati riportata nella cella K3 compaiono i nomi della prima riga del Foglio2. Selezionando il nominativo della convalida dati, mi deve creare l'elenco che segue nella colonna del foglio2. Esempio pratico: seleziono Gionatan, mi crea il pdf dei nomi riportati nel Foglio2 da D2 all'ultima riga piena della colonna D. Mi crea una cartella che riporta i file creati e alla cartella gli da il nome di Gionatan. La stessa cosa deve accadere se scelgo il nome di un'altra colonna. Spero di aver semplificato la mia richiesta.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2023-03-15T17:02:10+00:00

    Ciao Geacs,

    Ciao a tutti, non so se è possibile fare quanto sto per chiedere. Nel file che potete scaricare da qui, creato da Norman, creo dei dei file in pdf, in base al gruppo selezionato. Quello che mi servirebbe, è poter usare il nome riportato nella riga 1. In sostanza, invece di avere nella convalida dati nel foglio3 in K3 i nomi gruppo1. gruppo2 e ...., vorrei avere i nomi riportati nella riga 1 che possono essere cambiati. Questo mi permetterebbe di capire meglio il gruppo che gli appartiene e che devo convertire in Pdf.

    Spero di essere riuscito a spiegare bene quello che mi servirebbe. Grazie per l'attenzione che mostrerete.

    Se ho interpretato correttamente le tue esigenze, prova qualcosa del genere:

    '========>>

    Option Explicit

    '-------->>

    Public Sub Tester2()

    Dim WB As Workbook 
    
    Dim SH\_Convalida As Worksheet, SH\_Gruppi As Worksheet 
    
    Dim Rng\_Convalida As Range, Rng\_Gruppo As Range, Rng\_PDF As Range, rNominativo As Range 
    
    Dim rCell As Range 
    
    Dim sGruppo As String, sNominativo As String 
    
    Dim Res As Variant 
    
    Const sFoglio\_Convalida As String = **"Foglio3"                                                       '&lt;&lt;=== Modifica** 
    
    Const sFoglio\_Gruppi As String = **"Foglio2"                                                            '&lt;&lt;=== Modifica** 
    
    Const sCella\_Convalida As String = **"K3"                                                                  '&lt;&lt;=== Modifica** 
    
    Const sPercorso As String =**"C:\Users\Asus\Desktop\Nuova cartella\"               '&lt;&lt;=== Modifica** 
    
    Set WB = ThisWorkbook 
    
    With WB 
    
        Set SH\_Convalida = .Sheets(sFoglio\_Convalida) 
    
        Set SH\_Gruppi = .Sheets(sFoglio\_Gruppi) 
    
    End With 
    
    With SH\_Convalida 
    
        sNominativo = .Range(sCella\_Convalida).Value 
    
        '        Set Rng\_Convalida = .Range(sCella\_Convalida) 
    
        Set Rng\_PDF = .UsedRange 
    
    End With 
    
    With SH\_Gruppi 
    
        Set rNominativo = .UsedRange.Find(What:=sNominativo, \_ 
    
            After:=.Cells(1), \_ 
    
            Lookat:=xlWhole, \_ 
    
            LookIn:=xlFormulas, \_ 
    
            SearchOrder:=xlByRows, \_ 
    
            SearchDirection:=xlPrevious, \_ 
    
            MatchCase:=False) 
    
        sGruppo = rNominativo.Offset(-1).Value 
    
        Set Rng\_Gruppo = .Range(sGruppo) 
    
    End With 
    
    Res = Dir(sPercorso & sGruppo, vbDirectory) 
    
    If Res = vbNullString Then 
    
        MkDir sPercorso & sGruppo 
    
    End If 
    
    For Each rCell In Rng\_Gruppo.Cells 
    
        With rCell 
    
            sNominativo = .Value 
    
            If Not IsEmpty(.Value) Then 
    
                Call Crea\_PDF(Rng\_PDF, sPercorso & sGruppo & "\" & sNominativo) 
    
            End If 
    
        End With 
    
    Next rCell 
    
    Call MsgBox(Prompt:="Fatto", \_ 
    
        Buttons:=vbInformation, \_ 
    
        Title:="REPORT") 
    

    End Sub

    '--------->>

    Public Sub Crea_PDF(Rng As Range, sName As String)

    Rng.ExportAsFixedFormat \_ 
    
    Type:=xlTypePDF, \_ 
    
    Filename:=sName & ".pdf", \_ 
    
    Quality:=xlQualityStandard, \_ 
    
    IncludeDocProperties:=True, \_ 
    
    IgnorePrintAreas:=True, \_ 
    
    OpenAfterPublish:=False 
    

    End Sub

    '<<========

    Potresti scaricare il mio file di prova Geacs20230315.xlsm

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento