使用AddItem方法添加列表项 使用AddItem方法添加列表项,对于单列的列表框,在列表中添加一项。对于多列的列表框,在列表中添加一行,如下面的代码所示。 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 代码解析: 在窗体初始化时使用AddItem方法为列表框添加列表项。 AddItem方法的语法如下: object.AddItem [ item[,varIndex]] 参数object是必需的,一个有效的对象。 参数item是可选的,指定要添加的项或行。第一个项或行的编号为0;第二个项或行的编号为 1,依此类推。 参数varIndex是可选的,指定新的项或行在对象中的位置。 如果提供一个有效的varIndex的值,AddItem方法就把项或行放在列表中的那个位置。如果忽略 varIndex,此方法就把项或行添加在列表的末尾。对于多列列表框或者组合框,AddItem 方法插入一个完整的行,为控件的每一列都插入一项。为了给第一列后面的项赋值,可用List或Column属性来规定项的行和列。 对于工作表中使用窗体添加的列表框控件使用AddItem方法添加列表项,如下面的代码所示。 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过程设置使用AddItem方法添加为工作表中使用窗体控件添加的列表框添加列表项。 其中第5行代码使用ControlFormat属性来返回窗体控件,第6行代码使用RemoveAllItems方法删除窗体控件中的列表框的所有数据项,如果控件是ActiveX 列表框则需要使用Clear方法。
▲110 去除列表框数据源的重复值和空格 列表框的数据源引用工作表的数据时,如果工作表数据有重复值和空格,列表框也会出现重复值和空格。 为了在窗体显示时去除列表框的重复值和空格,可以使用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 代码解析: 窗体的初始化事件,去除列表框引用工作表数据中的重复值和空格。 第2行代码,错误处理语句,忽略错误。 第3行到第5行代码,声明变量类型。 第6行到第9行代码代码,在列表框引用的工作表数据中循环,把工作表数据源中的空格去除后使用Add方法添加到变量Col中。Add方法添加一个成员到Collection 对象,语法如下: object.Add item,key,before,after 参数object是必需的,一个有效的对象。 参数Item是必需的,任意类型的表达式,指定要添加到集合中的成员。 参数Key是可选的,唯一字符串表达式,指定可以使用的键字符串,代替位置索引来访问集合中的成员。 如果指定的key和集合中现有成员的key发生重复,则会导致错误发生。所以在第2行代码中使用错误处理语句,忽略错误,继续执行下一句代码,这样就将数据源中的重复值去除。 参数before是可选的,指定集合中的相对位置。在集合中将添加的成员放置在before参数识别的成员之前。如果参数是数值表达式,则before必须是介于 1和集合Count属性值之间的值。如果参数是字符串表达式,则当添加一个被引用的成员到集合时,before 必须对应于指定的key值。可以指定before位置或after位置,但不能同时指定这两个位置。 参数after是可选的,指定集合中的相对位置。在集合中将添加的成员放置在After参数识别的成员之后。如果参数是数值表达式,则after必须是介于 1和集合Count属性值之间的值;如果参数是字符串表达式,则当添加一个被引用的成员到集合时,after 必须对应于指定的key值。可以指定before位置或after位置,但不能同时指定这两个位置。 第10行到第14行代码,重新定义数组arr大小,把Col中数据赋给数组。 第15行代码,把数组arr复制到列表框中。 运行窗体,窗体中的列表框引用去除重复值和空格后的工作表数据。
▲111 移动列表框条目 将列表框中的条目进行上下移动,如下面的代码所示。 Dim Intlist As Integer Dim Strlist As String Private Sub CommandButton1_Click() WithMe.ListBox1 Intlist = .ListIndex Select Case Intlist Case -1 MsgBox '请选择一行后再移动!' Case 0 MsgBox '已经是最上一行了!' 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 '请选择一行后再移动!' Case .ListCount - 1 MsgBox '已经是最下一行了!' 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行代码在模块顶部声明两个变量分别用于保存列表框当前选中行的索引和内容。 第3行到第18行代码,将列表框当前选中行的内容上移一行的代码。其中第5行代码使用变量Intlist保存列表框当前选中行的索引号,第6行代码判断索引号,,第7、8行代码如果变量Intlist值为-1 ,说明当前没有选中的行,显示一个消息框进行提示。第9、10行代码变量Intlist值为0 ,说明当前选中的行已是第一行了。 列表框的ListIndex属性指定当前选中的列表框或组合框条目,语法如下: object.ListIndex [=Variant] 参数object是必需的,一个有效的对象。 参数Variant是可选的,控件中当前被选的条目。 第11行到第15行代码将当前选中的行向下移动一行,其中第12行代码将当前选中的行的内容赋给变量Strlist,第13行代码将当前选中行的内容更改为下面一行的内容,第14行代码将当前选中行的下面一行的内容更改为变量Strlist保存的内容,第15行代码将选中行向下移动一行,这样就将当前选中的行向下移动了一行。 第19行到第34行代码将当前选中的行向上移动一行。 将移动后的列表框条目保存到工作表中的代码如下: Private Sub CommandButton3_Click() Dimi As Integer Fori = 1 To ListBox1.ListCount Sheet1.Cells(i + 1,1) = ListBox1.List(i - 1) Next End Sub 代码解析: 窗体中“保存”按钮的单击过程,将移动后的列表框条目保存到工作表。 第3行到第5行代码使用For...Next 语句循环遍历列表框所有条目,将List属性返回的列表框的列表条目写入到工作表中。List属性返回或设置列表框或组合框的列表条目数,语法请参阅▲109-2。 |
|