LISTBOX elimina righe



  • LISTBOX: elimina righe...
    di volpeirrequieta (utente non iscritto) data: 19/08/2016 11:50:31

    buongiorno a tutti gli utenti del forum..
    ..e grazie in anticipo a chi mi vorrà dare una mano!

    allora ho un foglio con una tabella, collegata a questa tabella, ho una listbox dentro un userform!
    dovrei arrivare che con click del commandbuttonELIMINA cancellare dalla listbox e dalla tabella di origine la riga selezionata!




  • di Vecchio Frac data: 19/08/2016 11:55:17

    Hai già scritto del codice? hai un piccolo file di esempio da condividere?





  • di volpeirrequieta (utente non iscritto) data: 19/08/2016 11:56:07

    già messo il file



  • di patel data: 19/08/2016 12:47:28

    ne vuoi rimuovere una sola o tutte quelle selezionate ? vedo che hai impostato il multiselect.





  • di volpeirrequieta (utente non iscritto) data: 19/08/2016 13:23:43

    meglio il multiselect.. che poi può essere pure una!



  • di patel data: 19/08/2016 13:55:22

    col multiselect non lo so fare, aspettiamo Vecchio Frac





  • di Vecchio Frac data: 19/08/2016 14:11:55

    Oggi purtroppo ho problemini in famiglia e non ho tempo di spiegare... taglio corto e vi lascio studiare ^_^
    In pratica senza multiselect era facile perchè ci si riferiva a ListIndex e buonanotte. In questo caso (sarebbe meglio memorizzare in colonna zero, nascosta, l'indice di riga!) devo creare una collection degli indici di listbox selezionati e poi ripassarli uno a uno per eliminare le righe, quindi ricostruire il rowsource per eliminare le righe vuote.
     
    Private Sub CommandButtonELIMINA_Click()
    Dim i As Long, c As Collection, ur As Long
        Set c = New Collection
        Application.ScreenUpdating = False
        For i = 0 To ListBoxELENCO.ListCount - 1
            If ListBoxELENCO.Selected(i) Then c.Add i
        Next
        For i = c.Count To 1 Step -1
            Range(Cells(c(i) + 2, "A"), Cells(c(i) + 2, "G")).Delete xlShiftUp
        Next
        ur = Sheets("ELENCO").Range("A100").End(xlUp).Row
        ListBoxELENCO.RowSource = "ELENCO!A2:T" & ur
        Application.ScreenUpdating = True
    End Sub
    






  • di Vecchio Frac data: 19/08/2016 14:19:10

    Aggiungo!
    Nota bene che:
    - RemoveItem (post inziiale) non funziona perchè alla listbox è associata una fonte dati (non è stato usato AddItem)
    - nel mio codice ho ricostruito la fonte dati anche se non serviva (cancellare la riga di Excel automaticamente riallinea il contenuto della listbox), ma se non si fa così rimane attivo il range precedente e quindi nella listbox ci sono delle righe vuote. Così invece si ridefinisce il range della proprietà rowsource della listbox e le righe vuote scompaiono :)





  • di volpeirrequieta (utente non iscritto) data: 19/08/2016 15:35:19

    frank come sempre sei il TOP!!grazie tante, ora cerco di studiarla! :)

    ora cerco di aggiungere una textbox e un altro pulsante.. da usare per filtrare i dati della listbox..

    consigli su come farla!



  • di patel data: 19/08/2016 16:32:34

    io avrei questa soluzione che opera direttamente sul foglio
     
    Private Sub CB_CARICA_ELENCO_Click()
       ListBoxELENCO.MultiSelect = fmMultiSelectMulti
        ur = Sheets("ELENCO").Cells(Rows.Count, "A").End(xlUp).Row
        ListBoxELENCO.RowSource = "ELENCO!A2:G" & ur
        ListBoxELENCO.ColumnWidths = "72;90;80;200;40;80;30;"
        ListBoxELENCO.ColumnCount = 7
    End Sub
    
    Private Sub CommandButtonELIMINA_Click()
    Dim i As Long, arr()
    ReDim arr(ListBoxELENCO.ListCount)
    ii = 0
    For i = 0 To ListBoxELENCO.ListCount - 1
        If ListBoxELENCO.Selected(i) Then
            arr(ii) = i
            ii = ii + 1
        End If
    Next
    For j = ii - 1 To 0 Step -1
      Sheets("ELENCO").Rows(arr(j) + 2).Delete
    Next
    End Sub