Adattare listview come listbox



  • Adattare listview come listbox
    di ffante data: 01/04/2016 23:55:02

    Buonasera ho una listbox di ricerca con un problema nel caricare tutti i dati del foglio mi
    visualizza tutti i dati delle colonne, nel momento in cui filtro i dati mi fa visualizzare solo
    i dati filtrati delle prime 10 colonne credo che sia una limitazione della listbox.

    ho trovato in rete un file con una listview sto cercando di riadattarlo e con la combobox2
    mi filtra la zona con la textbox6 mi filtra la linea e con la combobox1 dovrei aggiungere
    il filtro anche della data non so se sia fattibile.

    ho allegato un file con listbox e listview.

    nel mio foglio ci sono 25 colonne con dati.

    vi ringrazio anticipatamente Franco.




  • di patel data: 02/04/2016 07:18:39

    dai un'occhiata qui h t t p://ennius.altervista.org/vba/vba106.php





  • di ffante data: 02/04/2016 21:25:23

    ho dato un'occhiata all'indirizzo che mi hai consigliato patel ma non sono in grado di

    poter adattare la listview per me è troppo complicata.

    sono un autodidatta cerco di seguire il forum per capire giorno per giorno nuove nozioni.






  • di patel data: 03/04/2016 09:01:26

    ti capisco, la soluzione è complessa per tutti, non solo per te.
    peccato che il file non sia scaricabile





  • di Albatros54 data: 03/04/2016 16:32:01

    Allora , se ho capito.
    ti allego il file "filtro lista 12", dove ho sostituito nella userform "Filtra_lista"
    la "listbox" con una "Listview".Non ho inserito tutti i 25 campi (lasci a te questo compito),
    il tutto sembra funzionare.Allego anche il codice che ho inserito.
    Ciao
    Albatros54   
     
    Option Explicit
    Dim i As Integer
    Dim sh As Worksheet
    Dim item As ListItem
    Dim UltimaRiga As Integer
    
    
    ---------------------------
    'eseguo il *filtro* della ListBox
    Private Sub CommandButton35_Click()
        Set sh = ThisWorkbook.Sheets("base")
         Dim lCont As Long
        lCont = 0
        With Me.ListView1
            ListView1.ListItems.Clear
            UltimaRiga = sh.Cells(Rows.Count, 1).End(xlUp).Row
            For i = 2 To UltimaRiga
                If sh.Cells(i, 1) = Me.ComboBox1.Text Then
                    Set item = ListView1.ListItems.Add(Text:=sh.Cells(i, 1))
                    item.SubItems(1) = sh.Cells(i, 2)
                    item.SubItems(2) = sh.Cells(i, 3)
                    item.SubItems(3) = sh.Cells(i, 4)
                    item.SubItems(4) = sh.Cells(i, 5)
                    'item.SubItems(5) = sh.Cells(i, 6)
                    lCont = lCont + 1
                End If
            Next
    
    
    
            
    
        End With
    
    End Sub
    
    ---------------------------------------------------------------
    Private Sub UserForm_Initialize()
        Dim lr As Integer
        Dim lng As Integer
        Set col = New Collection
        Set sh = ThisWorkbook.Sheets("base")
        With ListView1
            .Gridlines = True
            .View = lvwReport
            .FullRowSelect = True
            .ColumnHeaders.Add Text:="Data", Width:=50
            .ColumnHeaders.Add Text:="Reparto", Width:=50
            .ColumnHeaders.Add Text:="Linea", Width:=90
            .ColumnHeaders.Add Text:="Zona Rilevamento", Width:=100
            .ColumnHeaders.Add Text:="Codice", Width:=150
        End With
        With sh
            lr = .Range("A" & .Rows.Count).End(xlUp).Row
            For lng = 2 To lr
                On Error Resume Next
                col.Add CStr(.Cells(lng, "A").Value), CStr(.Cells(lng, "A").Value)
                If Err.Number = 0 Then
                    Me.ComboBox1.AddItem (.Cells(lng, "A").Value)
                End If
                Err.Number = 0
            Next
        End With
        Call Caricadati
    End Sub
    
    Private Sub Caricadati()
    Dim sh As Worksheet
    Set sh = ThisWorkbook.Sheets("base")
    
    ListView1.ListItems.Clear
    UltimaRiga = sh.Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To UltimaRiga
    Set item = ListView1.ListItems.Add(Text:=sh.Cells(i, 1))
    item.SubItems(1) = sh.Cells(i, 2)
    item.SubItems(2) = sh.Cells(i, 3)
    item.SubItems(3) = sh.Cells(i, 4)
    item.SubItems(4) = sh.Cells(i, 5)
    
    Next
    
    End Sub
    






  • di alfrimpa data: 03/04/2016 18:36:41

    Franco o Gioacchino potreste dirmi che controllo ListView avete insewrito nelle vs. form?

    Io pur avendo il Microsoft ListView Control Version 6.0 nella casella degli strumenti quando apro i file mi dà errore: "Impossibile caricare uno o più oggetti perché non disponibili su questo computer".

    Se inserisco sulla form una nuova ListView mi dà, stranamente, un errore di compilazione su una banale istruzione Lcase.

    Sapete dirmi qualcosa?

    Alfredo





  • di Albatros54 data: 03/04/2016 18:51:38

    @ Alfredo:
    ho inserito Microsoft ListView Control Version 6.0 .
    prova a scaricare il file che ho postato per vedere se da lo stesso errore.
    Guarda nel menu riferimenti di VBA , sicuramente te ne manca qualcuno, forse.
    Ciao
    Gioacchino





  • di alfrimpa data: 03/04/2016 19:16:17

    Quindi Gioacchino hai la stessa ListView che ho io ma a me dà errore quando apro il file e se vado avanti visualizzo la form in struttura senza la ListView inserita. mah.

    E l'errore che mi dà su Lcase?

    Misteri

    Alfredo





  • di ffante data: 03/04/2016 19:34:25

    @Alfredo

    Anche nel mio ho inserito Microsoft ListView Control Version 6.0 .

    o completato con le indicazioni di Albatros54 funziona perfettamente,allego il file completo

    funzionante per qualcun'altro.

    grazie 1000 a tutti.  
     
    Option Explicit
    Dim i As Integer
    Dim sh As Worksheet
    Dim item As ListItem
    Dim UltimaRiga As Integer
    Dim col As New Collection
     
    
    'carico la ListBox con tutti i dati
    Private Sub mCaricaTuttiDati()
     Call Caricadati
      
    End Sub
    
    
    
    'eventualmente ricarico tutti i dati
    Private Sub CommandButton36_Click()
    
        With Me
    
    
            Call Caricadati
        End With
    
    End Sub
    
    
    'eseguo il *filtro* della ListBox
    Private Sub CommandButton35_Click()
        Set sh = ThisWorkbook.Sheets("base")
        Dim v As Variant
        Dim lng As Long
        Dim lCont As Long
        lCont = 0
        With Me.ListView1
            ListView1.ListItems.Clear
            UltimaRiga = sh.Cells(Rows.Count, 1).End(xlUp).Row
            For i = 2 To UltimaRiga
                If sh.Cells(i, 1) = Me.ComboBox1.Text Then
                    Set item = ListView1.ListItems.Add(Text:=sh.Cells(i, 1))
                    item.SubItems(1) = sh.Cells(i, 2)
                    item.SubItems(2) = sh.Cells(i, 3)
                    item.SubItems(3) = sh.Cells(i, 4)
                    item.SubItems(4) = sh.Cells(i, 5)
                    item.SubItems(5) = sh.Cells(i, 6)
                    item.SubItems(6) = sh.Cells(i, 7)
                    item.SubItems(7) = sh.Cells(i, 8)
                    item.SubItems(8) = sh.Cells(i, 9)
                    item.SubItems(9) = sh.Cells(i, 10)
                    item.SubItems(10) = sh.Cells(i, 11)
                    item.SubItems(11) = sh.Cells(i, 12)
                    item.SubItems(12) = sh.Cells(i, 13)
                    item.SubItems(13) = sh.Cells(i, 14)
                    item.SubItems(14) = sh.Cells(i, 15)
                    item.SubItems(15) = sh.Cells(i, 16)
                    item.SubItems(16) = sh.Cells(i, 17)
                    item.SubItems(17) = sh.Cells(i, 18)
                    item.SubItems(18) = sh.Cells(i, 19)
                    item.SubItems(19) = sh.Cells(i, 20)
                    item.SubItems(20) = sh.Cells(i, 21)
                    item.SubItems(21) = sh.Cells(i, 22)
                    item.SubItems(22) = sh.Cells(i, 23)
                    item.SubItems(23) = sh.Cells(i, 24)
                    item.SubItems(24) = sh.Cells(i, 25)
                    'item.SubItems(25) = sh.Cells(i, 26)
    
                    lCont = lCont + 1
                End If
            Next
    
    
    
            ' -------------------------------------------------------------------------
    
        End With
    
    End Sub
    
    
    Private Sub CommandButton37_Click()
        Unload Me
    End Sub
    
    Private Sub Frame2_Click()
    
    End Sub
    
    Private Sub UserForm_Initialize()
        Dim lr As Integer
        Dim lng As Integer
        Set col = New Collection
        Set sh = ThisWorkbook.Sheets("base")
        With ListView1
            .Gridlines = True
            .View = lvwReport
            .FullRowSelect = True
            .ColumnHeaders.Add Text:="Data", Width:=52
            .ColumnHeaders.Add Text:="Reparto", Width:=40
            .ColumnHeaders.Add Text:="Linea", Width:=70
            .ColumnHeaders.Add Text:="Zona Rilevamento", Width:=75
            .ColumnHeaders.Add Text:="Codice", Width:=70
            .ColumnHeaders.Add Text:="Descrizione", Width:=150
            .ColumnHeaders.Add Text:="Turno", Width:=70
            .ColumnHeaders.Add Text:="Operatore Turno", Width:=70
            
            .ColumnHeaders.Add Text:="Ident Sist 1", Width:=60
            .ColumnHeaders.Add Text:="Orario Rit. 1", Width:=40
            .ColumnHeaders.Add Text:="Tipo Reperto 1", Width:=70
            
            .ColumnHeaders.Add Text:="Ident Sist 2", Width:=60
            .ColumnHeaders.Add Text:="Orario Rit. 2", Width:=40
            .ColumnHeaders.Add Text:="Tipo Reperto 2", Width:=70
            
            .ColumnHeaders.Add Text:="Ident Sist 3", Width:=60
            .ColumnHeaders.Add Text:="Orario Rit. 3", Width:=40
            .ColumnHeaders.Add Text:="Tipo Reperto 3", Width:=70
            
            .ColumnHeaders.Add Text:="Ident Sist 4", Width:=60
            .ColumnHeaders.Add Text:="Orario Rit. 4", Width:=40
            .ColumnHeaders.Add Text:="Tipo Reperto 4", Width:=70
            
            .ColumnHeaders.Add Text:="Ident Sist 5", Width:=60
            .ColumnHeaders.Add Text:="Orario Rit. 5", Width:=40
            .ColumnHeaders.Add Text:="Tipo Reperto 5", Width:=70
            
            .ColumnHeaders.Add Text:="Scarti M.D.Esito Neg.", Width:=90
            .ColumnHeaders.Add Text:="Note Turno", Width:=130
            
            
        End With
        With sh
            lr = .Range("A" & .Rows.Count).End(xlUp).Row
            For lng = 2 To lr
                On Error Resume Next
                col.Add CStr(.Cells(lng, "A").Value), CStr(.Cells(lng, "A").Value)
                If Err.Number = 0 Then
                    Me.ComboBox1.AddItem (.Cells(lng, "A").Value)
                End If
                Err.Number = 0
            Next
        End With
        Call Caricadati
    End Sub
    
    Private Sub Caricadati()
    Dim sh As Worksheet
    Set sh = ThisWorkbook.Sheets("base")
    
    ListView1.ListItems.Clear
    UltimaRiga = sh.Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To UltimaRiga
    Set item = ListView1.ListItems.Add(Text:=sh.Cells(i, 1))
    item.SubItems(1) = sh.Cells(i, 2)
    item.SubItems(2) = sh.Cells(i, 3)
    item.SubItems(3) = sh.Cells(i, 4)
    item.SubItems(4) = sh.Cells(i, 5)
    item.SubItems(5) = sh.Cells(i, 6)
    item.SubItems(6) = sh.Cells(i, 7)
    item.SubItems(7) = sh.Cells(i, 8)
    item.SubItems(8) = sh.Cells(i, 9)
    item.SubItems(9) = sh.Cells(i, 10)
    item.SubItems(10) = sh.Cells(i, 11)
    item.SubItems(11) = sh.Cells(i, 12)
    item.SubItems(12) = sh.Cells(i, 13)
    item.SubItems(13) = sh.Cells(i, 14)
    item.SubItems(14) = sh.Cells(i, 15)
    item.SubItems(15) = sh.Cells(i, 16)
    item.SubItems(16) = sh.Cells(i, 17)
    item.SubItems(17) = sh.Cells(i, 18)
    item.SubItems(18) = sh.Cells(i, 19)
    item.SubItems(19) = sh.Cells(i, 20)
    item.SubItems(20) = sh.Cells(i, 21)
    item.SubItems(21) = sh.Cells(i, 22)
    item.SubItems(22) = sh.Cells(i, 23)
    item.SubItems(23) = sh.Cells(i, 24)
    item.SubItems(24) = sh.Cells(i, 25)
    'item.SubItems(25) = sh.Cells(i, 26)
    
    Next
    
    End Sub
    



  • di isy data: 03/04/2016 19:34:50

    Ciao afrimpa
    Cit: dà errore quando apro il file e se vado avanti visualizzo la form in struttura senza la ListView inserita. mah.

    Tutto nella norma, il file è stato salvato in una versione di Excel 32 bit successiva alla tua.
    Se creo un Form con una ListView non posso utilizzarlo nelle versioni precedenti nemmeno se salvato in .Xls
    Devo ricrearla sul pc che sto utilizzando.
    Nota: Questo controllo non esiste per le versioni Excel 64Bit.




  • di alfrimpa data: 03/04/2016 20:43:08

    Ciao Isy e grazie della risposta.

    Ma anche l'errore sull'LCase (non trova la libreria) è dovuto allo stesso motivo?

    Se riproduco il tutto su un altro file ex novo funziona tutto.

    Alfredo





  • di patel data: 04/04/2016 07:59:38

    In conclusione il limite a 10 colonne c'è o non c'è, come è stato aggirato ? inserendo le colonne via vba ?





  • di Albatros54 data: 04/04/2016 18:56:49

    @patel

    Cit. In conclusione il limite a 10 colonne c'è o non c'è

    Il limite delle 10 colonne, credo che ci sia solamente se applichi un filtro per filtrare la listbox è visualizzare i risultati, mentre se la Listbox ti serve solamente per visualizzare dei dati il limite delle dieci colonne lo puoi aggirare
    con il codice che ti posto, che è applicato al file "ListBox10_over" allegato

    Cit.come è stato aggirato

    sostituendo la "listBox" con una "ListView" molto piu flessibile.

    Credo di non aver detto qualcosa di errato.

    Ciao
    Albatros54  
     
    Option Explicit
    Private sh As Worksheet
    
    Private Sub UserForm_Initialize()
        Set sh = ThisWorkbook.Worksheets("base")
        Call mCaricaListBox
    End Sub
    
    Private Sub mCaricaListBox()
        Dim rng As Range
        Set rng = sh.Range("A1").CurrentRegion
        With Me.ListBox1
            .ColumnCount = rng.Columns.Count
            .RowSource = sh.Name & "!" & rng.Address
        End With
    End Sub
    






  • di patel data: 04/04/2016 20:05:47

    grazie