Caricare in una listbox solo i dati filtrati su un foglio di excel

Anonimo
2012-03-09T12:54:35+00:00

Salve ragazzi,

Vorrei sapere se fosse possibile e come caricare i dati filtrati su un foglio in una listbox.

Anticipatamente ringrazio

Peppe

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
2012-03-12T08:02:47+00:00

Qualcuno mi sa spiegare perchè, se pur partendo dalla riga "A2", mi carica sulla listbox la prima riga ("A1") che è l'intestazione e che dovrebbe uscire nella columnheads invece esce come prima riga e la columnheads vuota????

Questo elimina la prima riga(l'intestazione della tabella) che importi nella ListBox aggiungendo una semplice riga di codice:

Private Sub CommandButton1_Click()

    Dim sh As Worksheet

     Dim rng As Range

     Dim lCol As Long

    Application.ScreenUpdating = False

     Set sh = ThisWorkbook.Worksheets("Foglio1")

     Set rng = sh.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)

    lCol = rng.Columns.Count

    With Me.ListBox1

         .ColumnCount = lCol

         .Clear

         rng.Copy

         ThisWorkbook.Worksheets.Add

         ActiveSheet.Range("A1").PasteSpecial

         Set rng = ActiveSheet.Range("A1").CurrentRegion

         Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1) '<<===

         .List = rng.Value

     End With

    With Application

         .DisplayAlerts = False

         ActiveSheet.Delete

         .DisplayAlerts = True

         .ScreenUpdating = True

     End With

    Set rng = Nothing

     Set sh = Nothing

End Sub

Per la prima colonna, non ho capito.

La risposta è stata utile?

0 commenti Nessun commento

9 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2012-03-10T08:52:48+00:00

    Qualcuno mi sa spiegare perchè, se pur partendo dalla riga "A2", mi carica sulla listbox la prima riga ("A1") che è l'intestazione e che dovrebbe uscire nella columnheads invece esce come prima riga e la columnheads vuota????

    Dim sh As Worksheet

        Dim rng As Range

        Dim lCol As Long

        Application.ScreenUpdating = False

        Set sh = ThisWorkbook.Worksheets("Sheet2")

        Set rng = sh.Range("A2").CurrentRegion

        lCol = rng.Columns.Count

        With UserForm1.ListBox1

            .ColumnCount = lCol

            .Clear

            Set rng = ActiveSheet.Range("A2").CurrentRegion

            .List = rng.Value

        End With

        With Application

            .DisplayAlerts = False

            .DisplayAlerts = True

            .ScreenUpdating = True

        End With

        Set rng = Nothing

        Set sh = Nothing

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2012-03-09T16:21:21+00:00

    Oltre a ringraziarvi entrambi per la pronta soluzione, il buon Mauro mi ha subito fatto accendere una lampadina, spiego meglio il mio problema:

    Su "Sheet1" carico tutte le cartelle esistenti in una cartella generale.

    Su "Sheet2" carico tutti i file esistenti nella cartella generale ed in tutte le sottocartelle.

    Sempre su "Sheet2" carico nella colonna "A" l'intera path dei files trasformati in Hyperlinks e nella colonna "B" solo i nomi dei files.

    Al lancio della userform1, la listbox1 si popola di tutti i nomi files della cartella generale ed al doppio click sulla listbox si apre il file usando listboxindex offset in colonna "A".

    Inoltre ho inserito 4 combobox dove risiederanno le sub folders a scalare ed ovviamente tutta la lista principale verrà filtrata in base alla subfolder selezionata.

    PROBLEMA:

    fin quando filtro un'intera folder non mi è stato difficile lanciare l'hyperlink ( anche se sicuramente è sbagliato il mio metodo)  in quanto parto dal basso della colonna "B", ricavo l'address dell'ultima riga filtrata, in colonna "C" ho un subtotale che mi dice quante righe filtrate ho, aggiungo al listindex il numero ricavato e con offset lancio l'Hyperlink.

    Purtroppo però se tramite una textbox filtro una parte del titolo, la colonna "B" (sarebbe quella filtrata), non sarà più sequenziale ma intervallata a secondo di dove risiede la parte del titolo filtrato.

    A questo punto come faccio a sapere l'address del titolo per spostarmi con offset sulla path già hyperlinkata?

    Provando la soluzione di Mauro ho visto che nella prima colonna della listbox mi carica la path e nella seconda i miei nomi. Ovviamente io dovrei vedere solo i nomi ma potrei sfruttare l'hyperlink direttamente dalla listbox????

    Così potrei eliminare tutti i miei casini e con o senza filtri aprire il file tramite hyperlink.

    Spero di essere stato chiaro e che si possa trovare una soluzione.

    Salute a tutti

    Peppe

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2012-03-09T14:37:37+00:00

    Salve ragazzi,

    Vorrei sapere se fosse possibile e come caricare i dati filtrati su un foglio in una listbox.

    Anticipatamente ringrazio

    Peppe

    Oltre alla risposta di David (ben tornato) se hai più di una colonna da caricare nella ListBox (che immagino sia in una UserForm), prova questa:

    Private Sub CommandButton1_Click()

        Dim sh As Worksheet

        Dim rng As Range

        Dim lCol As Long

        Application.ScreenUpdating = False

        Set sh = ThisWorkbook.Worksheets("Foglio1")

        Set rng = sh.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)

        lCol = rng.Columns.Count

        With Me.ListBox1

            .ColumnCount = lCol

            .Clear

            rng.Copy

            ThisWorkbook.Worksheets.Add

            ActiveSheet.Range("A1").PasteSpecial

            Set rng = ActiveSheet.Range("A1").CurrentRegion

            .List = rng.Value

        End With

        With Application

            .DisplayAlerts = False

            ActiveSheet.Delete

            .DisplayAlerts = True

            .ScreenUpdating = True

        End With

        Set rng = Nothing

        Set sh = Nothing

    End Sub

    Qui utilizzo un CommandButton ma puoi mettere il codice anche nell'evento Initialize.

    Una spiegazione. Utilizzo un foglio di appoggio per compattare le righe, altrimenti il Range non viene caricato nella ListBox. In questo modo è più veloce il caricamento della ListBox rispetto a ciclare le varie Areas del Range.  Forse, se le righe sono molte, è più veloce anche se hai un unico campo(colonna). Il foglio non viene mai visualizzato ed è eliminato dopo l'utilizzo.

    Grazie per l'attenzione (ed eventuali commenti).

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2012-03-09T13:54:08+00:00

    Ciao Giuseppe,

    vediamo se riesco ad aiutarti.

    Ipotizziamo che i tuoi dati filtrati siano in colonna A del tuo foglio e che la prima riga sia l'intestazione di colonna.

    Devi creare, se già non lo è, una listbox di tipo ActiveX (nell'esempio che segue si chiamerà Listbox1)

    Crei inoltre un pulsante di comando, sempre di tipo ActiveX che chiameremo CommandButton1.

    Nell'evento Click del pulsante inserisci quanto segue:


    Private Sub CommandButton1_Click()

        Dim lRiga As Integer

        Dim i As Integer

        Dim rng As Range

        i = 0

        With Me

            lRiga = .Range("A" & .Rows.Count).End(xlUp).Row

            Me.ListBox1.Clear

            For Each rng In Me.Range("A2:A" & lRiga).SpecialCells(xlCellTypeVisible)

                Me.ListBox1.AddItem

                    Me.ListBox1.List(i, 0) = rng.Value

                    i = i + 1

            Next rng

        End With

        Set rng = Nothing

    End Sub


    David

    La risposta è stata utile?

    0 commenti Nessun commento