使用AddItem方法添加列表項(xiàng) 使用AddItem方法添加列表項(xiàng),對(duì)于單列的列表框,在列表中添加一項(xiàng)。對(duì)于多列的列表框,在列表中添加一行,如下面的代碼所示。 Private Sub UserForm_Initialize() DimiRow As Integer Dimi As Integer iRow= Sheet1.Range('A65536').End(xlUp).Row Fori = 1 To iRow Me.ListBox1.AddItem (Sheet1.Cells(i,1)) Next End Sub 代碼解析: 在窗體初始化時(shí)使用AddItem方法為列表框添加列表項(xiàng)。 AddItem方法的語(yǔ)法如下: object.AddItem [ item[,varIndex]] 參數(shù)object是必需的,一個(gè)有效的對(duì)象。 參數(shù)item是可選的,指定要添加的項(xiàng)或行。第一個(gè)項(xiàng)或行的編號(hào)為0;第二個(gè)項(xiàng)或行的編號(hào)為 1,依此類(lèi)推。 參數(shù)varIndex是可選的,指定新的項(xiàng)或行在對(duì)象中的位置。 如果提供一個(gè)有效的varIndex的值,AddItem方法就把項(xiàng)或行放在列表中的那個(gè)位置。如果忽略 varIndex,此方法就把項(xiàng)或行添加在列表的末尾。對(duì)于多列列表框或者組合框,AddItem 方法插入一個(gè)完整的行,為控件的每一列都插入一項(xiàng)。為了給第一列后面的項(xiàng)賦值,可用List或Column屬性來(lái)規(guī)定項(xiàng)的行和列。 對(duì)于工作表中使用窗體添加的列表框控件使用AddItem方法添加列表項(xiàng),如下面的代碼所示。 Sub AddItem() DimiRow As Integer Dimi As Integer iRow= Sheet1.Range('A65536').End(xlUp).Row WithSheet2.Shapes('列表框').ControlFormat .RemoveAllItems For i = 1 To iRow .AddItem Sheet1.Cells(i,1) Next EndWith End Sub 代碼解析: AddItem過(guò)程設(shè)置使用AddItem方法添加為工作表中使用窗體控件添加的列表框添加列表項(xiàng)。 其中第5行代碼使用ControlFormat屬性來(lái)返回窗體控件,第6行代碼使用RemoveAllItems方法刪除窗體控件中的列表框的所有數(shù)據(jù)項(xiàng),如果控件是ActiveX 列表框則需要使用Clear方法。
▲110 去除列表框數(shù)據(jù)源的重復(fù)值和空格 列表框的數(shù)據(jù)源引用工作表的數(shù)據(jù)時(shí),如果工作表數(shù)據(jù)有重復(fù)值和空格,列表框也會(huì)出現(xiàn)重復(fù)值和空格。 為了在窗體顯示時(shí)去除列表框的重復(fù)值和空格,可以使用Add方法,如下面的代碼所示。 Private Sub UserForm_Initialize() On ErrorResume Next DimCol As New Collection Dimrng As Range,arr Dimi As Integer ForEach rng In Range('A1:A' & [a65536].End(xlUp).Row) If Trim(rng) <> ““ Then Col.Add rng,key:=CStr(rng) End If Next ReDimarr(1 To Col.Count) Fori = 1 To Col.Count arr(i) = Col(i) Next Me.ListBox1.List= arr End Sub 代碼解析: 窗體的初始化事件,去除列表框引用工作表數(shù)據(jù)中的重復(fù)值和空格。 第2行代碼,錯(cuò)誤處理語(yǔ)句,忽略錯(cuò)誤。 第3行到第5行代碼,聲明變量類(lèi)型。 第6行到第9行代碼代碼,在列表框引用的工作表數(shù)據(jù)中循環(huán),把工作表數(shù)據(jù)源中的空格去除后使用Add方法添加到變量Col中。Add方法添加一個(gè)成員到Collection 對(duì)象,語(yǔ)法如下: object.Add item,key,before,after 參數(shù)object是必需的,一個(gè)有效的對(duì)象。 參數(shù)Item是必需的,任意類(lèi)型的表達(dá)式,指定要添加到集合中的成員。 參數(shù)Key是可選的,唯一字符串表達(dá)式,指定可以使用的鍵字符串,代替位置索引來(lái)訪問(wèn)集合中的成員。 如果指定的key和集合中現(xiàn)有成員的key發(fā)生重復(fù),則會(huì)導(dǎo)致錯(cuò)誤發(fā)生。所以在第2行代碼中使用錯(cuò)誤處理語(yǔ)句,忽略錯(cuò)誤,繼續(xù)執(zhí)行下一句代碼,這樣就將數(shù)據(jù)源中的重復(fù)值去除。 參數(shù)before是可選的,指定集合中的相對(duì)位置。在集合中將添加的成員放置在before參數(shù)識(shí)別的成員之前。如果參數(shù)是數(shù)值表達(dá)式,則before必須是介于 1和集合Count屬性值之間的值。如果參數(shù)是字符串表達(dá)式,則當(dāng)添加一個(gè)被引用的成員到集合時(shí),before 必須對(duì)應(yīng)于指定的key值。可以指定before位置或after位置,但不能同時(shí)指定這兩個(gè)位置。 參數(shù)after是可選的,指定集合中的相對(duì)位置。在集合中將添加的成員放置在After參數(shù)識(shí)別的成員之后。如果參數(shù)是數(shù)值表達(dá)式,則after必須是介于 1和集合Count屬性值之間的值;如果參數(shù)是字符串表達(dá)式,則當(dāng)添加一個(gè)被引用的成員到集合時(shí),after 必須對(duì)應(yīng)于指定的key值。可以指定before位置或after位置,但不能同時(shí)指定這兩個(gè)位置。 第10行到第14行代碼,重新定義數(shù)組arr大小,把Col中數(shù)據(jù)賦給數(shù)組。 第15行代碼,把數(shù)組arr復(fù)制到列表框中。 運(yùn)行窗體,窗體中的列表框引用去除重復(fù)值和空格后的工作表數(shù)據(jù)。
▲111 移動(dòng)列表框條目 將列表框中的條目進(jìn)行上下移動(dòng),如下面的代碼所示。 Dim Intlist As Integer Dim Strlist As String Private Sub CommandButton1_Click() WithMe.ListBox1 Intlist = .ListIndex Select Case Intlist Case -1 MsgBox '請(qǐng)選擇一行后再移動(dòng)!' Case 0 MsgBox '已經(jīng)是最上一行了!' Case Is > 0 Strlist = .List(Intlist) .List(Intlist) = .List(Intlist- 1) .List(Intlist - 1) = Strlist .ListIndex = Intlist - 1 End Select EndWith End Sub Private Sub CommandButton2_Click() WithListBox1 Intlist = .ListIndex Select Case Intlist Case -1 MsgBox '請(qǐng)選擇一行后再移動(dòng)!' Case .ListCount - 1 MsgBox '已經(jīng)是最下一行了!' Case Is < .ListCount - 1 Strlist = .List(Intlist) .List(Intlist) = .List(Intlist +1) .List(Intlist + 1) = Strlist .ListIndex = Intlist + 1 End Select EndWith End Sub 代碼解析: 第1、2行代碼在模塊頂部聲明兩個(gè)變量分別用于保存列表框當(dāng)前選中行的索引和內(nèi)容。 第3行到第18行代碼,將列表框當(dāng)前選中行的內(nèi)容上移一行的代碼。其中第5行代碼使用變量Intlist保存列表框當(dāng)前選中行的索引號(hào),第6行代碼判斷索引號(hào),,第7、8行代碼如果變量Intlist值為-1 ,說(shuō)明當(dāng)前沒(méi)有選中的行,顯示一個(gè)消息框進(jìn)行提示。第9、10行代碼變量Intlist值為0 ,說(shuō)明當(dāng)前選中的行已是第一行了。 列表框的ListIndex屬性指定當(dāng)前選中的列表框或組合框條目,語(yǔ)法如下: object.ListIndex [=Variant] 參數(shù)object是必需的,一個(gè)有效的對(duì)象。 參數(shù)Variant是可選的,控件中當(dāng)前被選的條目。 第11行到第15行代碼將當(dāng)前選中的行向下移動(dòng)一行,其中第12行代碼將當(dāng)前選中的行的內(nèi)容賦給變量Strlist,第13行代碼將當(dāng)前選中行的內(nèi)容更改為下面一行的內(nèi)容,第14行代碼將當(dāng)前選中行的下面一行的內(nèi)容更改為變量Strlist保存的內(nèi)容,第15行代碼將選中行向下移動(dòng)一行,這樣就將當(dāng)前選中的行向下移動(dòng)了一行。 第19行到第34行代碼將當(dāng)前選中的行向上移動(dòng)一行。 將移動(dòng)后的列表框條目保存到工作表中的代碼如下: Private Sub CommandButton3_Click() Dimi As Integer Fori = 1 To ListBox1.ListCount Sheet1.Cells(i + 1,1) = ListBox1.List(i - 1) Next End Sub 代碼解析: 窗體中“保存”按鈕的單擊過(guò)程,將移動(dòng)后的列表框條目保存到工作表。 第3行到第5行代碼使用For...Next 語(yǔ)句循環(huán)遍歷列表框所有條目,將List屬性返回的列表框的列表?xiàng)l目寫(xiě)入到工作表中。List屬性返回或設(shè)置列表框或組合框的列表?xiàng)l目數(shù),語(yǔ)法請(qǐng)參閱▲109-2。 |
|
來(lái)自: wdmexcel > 《待分類(lèi)》