Codice che filtra e crea Pdf

Anonimo
2022-04-11T19:47:40+00:00

Ciao a tutti,

Chiedo il vostro aiuto per avere la possibilità, mediante la selezione di un nominativo da una combobox di filtrare tutte le righe riportate nel foglio1 che riportano lo stesso nome nella colonna C creandomi un foglio in formato pdf. I nomi che devono essere riportati nella Combobox, sono elencati da W1:W8.

Per praticità riporto un esempio che trovate qui.

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
2022-04-12T07:39:48+00:00

Ciao Geacs,

Buongiorno A Norman e Daniele,

Grazie per il codice postato, ottimo risultato e risponde pienamente alla mia domanda. Buona giornata a Ti ringrazio per il cortese riscontro, entrambi

Ti ringrazio per il cortese riscontro.

Comunque, nel mio codice ho usato il metodo Worksheet.ExportAsFixedFormat, piuttosto che il metodo Range.ExportAsFixedFormat, perché ho anticipato una tua richiesta supplementare.

Non essendosi stata realizzata tale anticipazione, credo che il codice possa essere proficuamente semplificato e il suo tempo di esecuzione può essere ridotto sostituendo la procedura CommandButton1_Click con la seguente versione:

'-------->>

Private Sub CommandButton1_Click()

Dim newWB As Workbook 

Dim Rng As Range 

Dim LObj As ListObject 

Dim vFileName As Variant 

Dim sNome As String 

Const sTabella As String = "Tabella1" 

vFileName = Application.GetSaveAsFilename( \_ 

    fileFilter:="PDF Files (\*.pdf), \*.pdf") 

If vFileName = False Then 

    Call MsgBox(Prompt:="Non hai fornito un nome per il file pdf!" & vbNewLine & "Operazione cancellato!", \_ 

        Buttons:=vbCritical, \_ 

        Title:="REPORT") 

    Exit Sub 

End If 

sNome = Me.ComboBox1.Value 

Set LObj = SH.ListObjects(sTabella) 

With LObj.Range 

    .AutoFilter Field:=3, Criteria1:=sNome 

    .ExportAsFixedFormat \_ 

        Type:=xlTypePDF, \_ 

        Filename:=vFileName, \_ 

        Quality:=xlQualityStandard, \_ 

        IncludeDocProperties:=True, \_ 

        IgnorePrintAreas:=False, \_ 

        OpenAfterPublish:=False 

    .AutoFilter 

End With 

Call MsgBox(Prompt:="il file " & vFileName & " è stato salvato", \_ 

    Buttons:=vbInformation, \_ 

    Title:="REPORT") 

End Sub

'<<========

Ho aggiornato il mio file di prova Geacs20220411.xlsm

===

Regards,

Norman

Immagine

La risposta è stata utile?

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

Risposta accettata dall'autore della domanda

Anonimo
2022-04-11T21:01:03+00:00

Ciao,

qui Daniele, bentrovato nella community Microsoft,

prova con questo esempio:

https://1drv.ms/x/s!AmEDljrOgi7EgZgtAlftWbCqa3u...

La risposta è stata utile?

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

4 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2022-04-12T05:42:24+00:00

    Buongiorno A Norman e Daniele,

    Grazie per il codice postato, ottimo risultato e risponde pienamente alla mia domanda. Buona giornata a entrambi

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2022-04-12T10:29:54+00:00

    Ciao Norman,

    Grazie per aver reso più veloce il codice. Avevo notato che nel primo caso, prima di creare il file in PDF creava un nuovo foglio Excel.

    Molto meglio quest'ultimo per il mio caso. Grazie di tutto

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2022-04-11T21:43:18+00:00

    Ciao Geacs,

    Chiedo il vostro aiuto per avere la possibilità, mediante la selezione di un nominativo da una combobox di filtrare tutte le righe riportate nel foglio1 che riportano lo stesso nome nella colonna C creandomi un foglio in formato pdf. I nomi che devono essere riportati nella Combobox, sono elencati da W1:W8.

    Per praticità riporto un esempio che trovate qui.

    In alternativa, e poiché non avevo visto la risposta di Daniel quando ho scritto il mio codice, prova qualcosa del genere:

    Nel modulo di codice della tua Userform. modulo standard, incolla:

    '========>>

    Option Explicit

    Dim SH As Worksheet

    Const sFoglio As String = "Foglio1"

    Const sColonne_Dati As String = "A:G"

    '-------->>

    Private Sub UserForm_Initialize()

    Dim RngNomi As Range 
    
    Const sIntervallo\_Nomi As String = "W1:W8" 
    
    Set SH = ThisWorkbook.Sheets(sFoglio) 
    
    Set RngNomi = SH.Range(sIntervallo\_Nomi) 
    
    With Me.ComboBox1 
    
        .List = RngNomi.Value 
    
        .ListIndex = 0 
    
    End With 
    

    End Sub

    '-------->>

    Private Sub CommandButton1_Click()

    Dim newWB As Workbook 
    
    Dim Rng As Range 
    
    Dim LObj As ListObject 
    
    Dim vFileName As Variant 
    
    Dim sNome As String 
    
    Const sTabella As String = "Tabella1" 
    
    vFileName = Application.GetSaveAsFilename( \_ 
    
        fileFilter:="PDF Files (\*.pdf), \*.pdf") 
    
    If vFileName = False Then 
    
        Call MsgBox(Prompt:="Non hai fornito un nome per il file pdf!" & vbNewLine & "Operazione cancellato!", \_ 
    
            Buttons:=vbCritical, \_ 
    
            Title:="REPORT") 
    
        Exit Sub 
    
    End If 
    
    sNome = Me.ComboBox1.Value 
    
    Set LObj = SH.ListObjects(sTabella) 
    
    LObj.Range.AutoFilter Field:=3, Criteria1:=sNome 
    
    Set newWB = Workbooks.Add(xlWBATWorksheet) 
    
    Set Rng = SH.Range(sColonne\_Dati).SpecialCells(xlCellTypeVisible) 
    
    Rng.Copy Destination:=newWB.Sheets(1).Range("A1") 
    
    newWB.Sheets(1).ExportAsFixedFormat \_ 
    
        Type:=xlTypePDF, \_ 
    
        Filename:=vFileName, \_ 
    
        Quality:=xlQualityStandard, \_ 
    
        IncludeDocProperties:=True, \_ 
    
        IgnorePrintAreas:=False, \_ 
    
        OpenAfterPublish:=False 
    
    LObj.Range.AutoFilter 
    
    newWB.Close Savechanges:=False 
    
    Call MsgBox(Prompt:="il file " & vFileName & " è stato salvato", \_ 
    
        Buttons:=vbInformation, \_ 
    
        Title:="REPORT") 
    

    End Sub

    '<<========

    Potresti scaricare il mio file di prova Geacs20220411.xlsm

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento