VBA Excel listadobozt multiselect - kötődés adatokat a tartomány listaablakban; hozzáadását, törlését tételek

«VBA Excel ListBox Több kiválasztása»
A kötődési adatokat tartomány a ListBox.
Hozzáadása, törlése a tételek listáját.
Rendezze a listát, és feleletválasztós terméket.

ListBox vagy „ablakban lévő” - az egyik az ellenőrzések lehet helyezni olyan formában, hogy a felhasználó válasszon ki egy vagy több elemet (elemeket) az adott készlet (lista) opciók ...
    VBA kétféle módon tölthető a ListBox ...
  • Keresztül a RowSource tulajdonság (forrás vonalak) a listán betöltött egy bizonyos tartományban (cella oszlop). Ebben az esetben az új, elem a listában, vagy a listáról eltávolítani végrehajtása során VBA makró ... nem lehetséges (legalábbis addig, amíg a feladat ingatlan értéke RowSource üres string).
  • Módszerekkel AddItem és RemoteItem (hozzáadásával vagy eltávolításával lista elem) ... Megismétlem, hogy egy ilyen lehetőség, RowSource tulajdon lehet null.
  • Adjunk hozzá néhány rádiógombjainak formájában, akkor képes betölteni a ListBox1 tétellistákat különböző oszlopok Excel munkalapon.
    Biztosítja a képességét, hogy rendezze a letöltött listája ListBox1.
    Engedélyezze több elem kiválasztása a listából, és megjeleníti az eredményeket a kiválasztási MsgBox üzenet.

    VBA Excel listadobozt multiselect - kötődés adatokat a tartomány listaablakban; hozzáadását, törlését tételek

    Kötődés listához értéktartomány egész RowSource ingatlan

    Úgy vélem, hogy a kényelem a tényleges munka listákkal Excel munkalapon (a hozzáadott új értékeket a megfelelő oszlopokban a sejt vagy eltávolítása), akkor kell használni a funkció automatikusan érzékeli az utolsó kitöltött sor számát ebben az oszlopban ...
    Keresse tartomány módszer az objektum osztály (ajánlom egy pillantást az ő segítségével) nagyon hasznos ebben az ügyben ....
    És így, a funkció nézd, például az alábbiak szerint ....

    Funkció GetLastRowFromColumn (numColumn As Integer) As Integer
    GetLastRowFromColumn = Oszlopok (numColumn) .Cells.Find ( "*". XlByRows, xlPrevious) .Row
    End Function

    Mint látható, az egyetlen paraméter megkapja az oszlop száma (az egyszerűség kedvéért hagytam csak egy lapot a munkafüzetet, és a lap egyébként is kellene megadni a paraméter), és visszaadja a húr, hogy a sejtek száma a visszaküldött módszer Find ...

    Ezután a eseménykezelőkkel egér rákattint a rádió gomb fog kinézni ...

    Private Sub OptionButton1_Click ()
    lastrow = GetLastRowFromColumn (1)
    Ha OptionButton1 Aztán Me.ListBox1.RowSource = "= A1: A" lastrow
    End Sub

    Private Sub OptionButton2_Click ()
    lastrow = GetLastRowFromColumn (2)
    Ha OptionButton2 Ezután Me.ListBox1.RowSource = "= B1: B" lastrow
    End Sub

    Private Sub OptionButton3_Click ()
    lastrow = GetLastRowFromColumn (3)
    Ha OptionButton3 Ezután Me.ListBox1.RowSource = "= C1: C" lastrow
    End Sub

    Lehetséges lenne, és még könnyebb (az egyik sor az eljárás)

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

    de úgy vélem, hogy a jelenléte változó lastrow segít, hogy megtekinthesse annak ár-érték hibakeresés, és ez időt takarít meg .... ami több, mint a csökkenés az összeg a kódot ...

    Általában az első választógombot adunk az előadók listáját, és a tartomány (a RowSource tulajdon), és a második, illetve harmadik helyen, a B és C oszlopában ...

    feleletválasztós

    Fő ListBox elem tulajdon - List ... indexelt értékek listája ... (As Variant) Ezért minden elemet a listán lehet elérni index ..., mint a List (IDX) ...
    És éppen olyan fontos, második indexelt tulajdonság Selected (IDX), amely egy sor logikai változók jelzi, hogy egy adott elem a felhasználó listából válassza-e vagy sem ...

    Így a felvezető „Üzenet” gomb így néz ki ...

    Private Sub CommandButton1_Click ()
    Dim n As Integer, s As String
    s = ""

    Az n = 0 Me.ListBox1.ListCount - 1
    Ha Me.ListBox1.Selected (n) Ezután
    s = s Me.ListBox1.List (n) vbLf
    End If
    Következő n

    Ha s = „” Akkor
    MsgBox „Nem a” 0 „Kiválasztott elemek listája”
    más
    MsgBox s, 0, "Kiválasztott elemek listája"
    End If

    Ez képezi egy string s. Csak a kiválasztott elem a listán, és egy üzenetet jelenít meg ... A beépített állandó vbLf azt jelenti, mozog egy új vonal ...

    A lista a

    De számunkra a lista rendezéséhez kellett volna elhagyni a tulajdonságok RowSource. mert sorrendjének megváltoztatásához a lista elemeit ellentétes lenne kötve tartományban. VBA tisztességes zarugaetsya ...

    Itt ListBox objektum rendezési eljárás (amelyet át paraméterként As Object)

    Sub mySort (aL As Object)
    Dim locList () As Variant, siz As Long
    „Rendezi a listát ListBox (.List tulajdon - tömbként Variant)
    Dim j As Long
    siz = UBound (aL.List)
    ReDim locList (UBound (aL.List))

    J = 0-To siz
    locList (j) = .List (j)
    Következő j

    RowSource = ""
    .világos
    mySortArray locList

    J = 0-To siz
    .AddItem (locList (j))
    Következő j

    végződésű
    End Sub

    Mint látható, először hozzon létre egy tömböt locList () a kívánt méreteket és töltse fel az elemeket a lista ...
    Ezután, veszít a listáját span (aL.RowSource = "") és a tisztított (aL.Clear) ...
    Egyfajta tömb kapott hagyományos módon (bármely, a rendezési algoritmusok).
    Minden. Továbbra is betölteni a rendezett tömbben a listában a AddItem módszerrel. Természetesen egy sor ...

    Ahhoz, hogy multi-select lista elemeit, ne felejtsük el, hogy hozzanak egy ingatlan

    ListBox1.MultiSelect = fmMultiSelectMulti

    ...
    ...
    Minden ...

    Fájl letöltése tesztelésre

    Megszerzésének feltételei a kódot? Itt található?

    További példák a „automatizálása Microsoft Office Excel-dokumentumok, Word, Access»

    További példák a nyelv «Visual Basic»

    További példák a nyelv «Visual Basic for Application - VBA»

    Ha ez az oldal nem találja, amit keres, így.