Vba excel listbox multiselect - obligați o gamă de date în lista; adăugarea, ștergerea elementelor

«VBA Excel ListBox Multiselect»
Legarea intervalului de date la lista.
Adăugarea, ștergerea elementelor din listă.
Sortați lista și selectați mai multe elemente.






Un ListBox sau o "casetă combo" este unul dintre comenzile care pot fi plasate pe formular pentru a permite utilizatorului să selecteze unul sau mai multe elemente din lista de opțiuni furnizate ...
    VBA oferă două opțiuni pentru popularea listei ListBox ...
  • Prin proprietatea RowSource (sursa de rând), un anumit interval este încărcat în listă (coloana celulelor). În acest caz, nu este posibil să adăugați elemente noi în listă sau să ștergeți macrocomenzile VBA existente din lista ... (cel puțin până când proprietatea RowSource este setată la un șir gol).
  • Prin metodele AddItem și RemoteItem (adăugând sau eliminând elementele din listă) ... Repet că pentru această posibilitate, proprietatea RowSource trebuie să aibă o valoare goală.
  • Plasați mai multe butoane radio pe formular, permițându-vă să încărcați liste din diferite coloane ale foii Excel în elementul ListBox1.
    Activează abilitatea de a sorta listele descărcate în ListaBox1.
    Oferiți posibilitatea selecției multiple a elementelor din listă și ieșirea rezultatului selecției în fereastra de mesaje MsgBox.

    Vba excel listbox multiselect - obligați o gamă de date în lista; adăugarea, ștergerea elementelor

    Legați la lista de valori de valori prin proprietatea Rowsource

    Cred că pentru confortul lucrării reale cu listele din foile Excel (adăugarea de noi valori în celulele coloanelor corespunzătoare sau ștergerea celor existente), trebuie să utilizați funcția pentru a determina automat numărul ultimului rând umplut în coloana specificată ...
    Metoda Găsirea obiectelor din clasa Range (Vă recomandăm să vă uitați la ajutorul ei) este foarte utilă în această chestiune ....
    Și astfel, funcția poate arăta, de exemplu, după cum urmează ...

    Funcție GetLastRowFromColumn (numColumn ca Integer) ca Integer
    GetLastRowFromColumn = Coloane (numColumn) .Cells.Find ("*" .XlByRows, xlPrevious) .Row
    Terminați funcția

    După cum puteți vedea, singurul parametru care primește numărul coloanei (deși pentru simplitate am plecat de la o singură foaie din registrul de lucru, iar foaia de altfel ar, de asemenea, ar trebui să fie specificat ca parametru), și returnează șirul că numărul de celule al metodei returnate Găsiți ...







    Apoi, managerii de evenimente pentru clicurile de mouse pe butoanele radio vor arăta astfel ...

    Private Sub OptionButton1_Click ()
    lastrow = GetLastRowFromColumn (1)
    Dacă opțiunea OptionButton1 Apoi Me.ListBox1.RowSource = "= A1: A" lastrow
    End Sub

    Private Sub OptionButton2_Click ()
    lastrow = GetLastRowFromColumn (2)
    Dacă OptionButton2 Apoi Me.ListBox1.RowSource = "= B1: B" lastrow
    End Sub

    Private Sub OptionButton3_Click ()
    lastrow = GetLastRowFromColumn (3)
    Dacă OptionButton3 Apoi Me.ListBox1.RowSource = "= C1: C" lastrow
    End Sub

    De asemenea, ar putea fi simplificat (până la o linie în procedură),

    Me.ListBox1.RowSource = "= A1: A" GetLastRowFromColumn (1)

    dar cred că prezența ultimei variabile vă ajută să vedeți valoarea ei atunci când depanați, și acesta este timpul salvat .... care este mai scump decât reducerea cantității de cod ...

    În general, primul buton radio plasează intervalul din coloana A (folosind proprietatea Rowsource) din listă, iar al doilea și al treilea, respectiv, din coloanele B și C ...

    Mai multe opțiuni

    Principala proprietate element de ListBox - Lista ... este o listă indexată de valori ... (Ca variantă) Prin urmare, orice element din lista pot fi accesate prin indexul ... cum ar fi Lista (IDX) ...
    Și la fel de important este a doua proprietate indexată Selected (idx), care este o serie de valori booleene care indică dacă un anumit element de listă este evidențiat de utilizator sau nu ...

    Astfel, butonul pentru mesajul "Mesaj" arată astfel ...

    Private Sub CommandButton1_Click ()
    Dim n ca întreg, s ca șir
    s = ""

    Pentru n = 0 Pentru a Me.ListBox1.ListCount - 1
    Dacă Me.ListBox1.Selected (n) Apoi
    s = s Me.ListBox1.List (n) vbLf
    Sfârșit Dacă
    Următorul n

    Dacă s = "" Atunci
    MsgBox "Nu s-au selectat elemente", 0, "Elemente listate selectate"
    altfel
    MsgBox s, 0, "Elemente de listă selectate"
    Sfârșit Dacă

    Formează sirul. numai din elementele selectate din listă și afișează un mesaj corespunzător ... VbLf-ul constant încorporat înseamnă un salt la o linie nouă ...

    Lista de sortare

    Dar pentru a sorta lista trebuie să abandonăm proprietatea RowSource. deoarece Schimbarea în ordinea articolelor din listă va contrazice intervalul limitat. VBA va abuza doar ...

    Iată procedura de sortare a unui obiect ListBox (care este trecut ca parametru As Object)

    Sub mySort (aL ca obiect)
    Dim locList () ca varianta, siz As Long
    'Sorts a ListBox (proprietatea .List este o matrice de Variant)
    Dim j cât de lung
    siz = UBound (aL.List)
    ReDim locList (UBound (aL.List))

    Pentru j = 0 Pentru siz
    locList (j) = .List (j)
    Următorul j

    RowSource = ""
    .clar
    mySortArray locList

    Pentru j = 0 Pentru siz
    .AddItem (locList (j))
    Următorul j

    Sfârșit cu
    End Sub

    După cum puteți vedea, creați mai întâi matricea locList () a dimensiunii cerute și completați-o cu elementele din listă ...
    Apoi dezactivați lista din intervalul (aL.RowSource = "") și ștergeți-o (aL.Clear) ...
    Și matricea rezultată este sortată în mod obișnuit (prin orice algoritm de sortare).
    Asta e tot. Rămâne să încărcați matricele sortate în listă utilizând metoda AddItem. desigur, într-un ciclu ...

    Pentru a putea selecta mai multe elemente din listă, nu uitați să setați proprietatea

    ListBox1.MultiSelect = fmMultiSelectMulti

    ...
    ...
    Toate ...

    Descărcați fișierul pentru testare

    Condiții pentru obținerea codului? Arată?

    Alte exemple pe tema "Automatizarea documentelor Microsoft Office Excel, Word, Access"

    Alte exemple în limba "Visual Basic"

    Alte exemple în limba "Visual Basic for Application - VBA"

    Dacă pe această pagină nu ați găsit ceea ce căutați.







    Trimiteți-le prietenilor: