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 ...
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.
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»