分享

VBA常用代码解析(第二十八讲)

 wdmexcel 2015-09-14

使用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(i1))

Next

End Sub

代码解析:

在窗体初始化时使用AddItem方法为列表框添加列表项。

AddItem方法的语法如下:

object.AddItem [ item[varIndex]]

参数object是必需的,一个有效的对象。

参数item是可选的,指定要添加的项或行。第一个项或行的编号为0;第二个项或行的编号为 1,依此类推。

参数varIndex是可选的,指定新的项或行在对象中的位置。

如果提供一个有效的varIndex的值,AddItem方法就把项或行放在列表中的那个位置。如果忽略 varIndex,此方法就把项或行添加在列表的末尾。对于多列列表框或者组合框,AddItem 方法插入一个完整的行,为控件的每一列都插入一项。为了给第一列后面的项赋值,可用ListColumn属性来规定项的行和列。

对于工作表中使用窗体添加的列表框控件使用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(i1)

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 Rangearr

Dimi As Integer

ForEach rng In Range('A1:A' & [a65536].End(xlUp).Row)

If Trim(rng) <> ““ Then

Col.Add rngkey:=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 itemkeybeforeafter

参数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

代码解析:

12行代码在模块顶部声明两个变量分别用于保存列表框当前选中行的索引和内容。

3行到第18行代码,将列表框当前选中行的内容上移一行的代码。其中第5行代码使用变量Intlist保存列表框当前选中行的索引号,第6行代码判断索引号,,第78行代码如果变量Intlist值为-1 ,说明当前没有选中的行,显示一个消息框进行提示。第910行代码变量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 + 11) = ListBox1.List(i - 1)

Next

End Sub

代码解析:

窗体中“保存”按钮的单击过程,将移动后的列表框条目保存到工作表。

3行到第5行代码使用For...Next 语句循环遍历列表框所有条目,将List属性返回的列表框的列表条目写入到工作表中。List属性返回或设置列表框或组合框的列表条目数,语法请参阅▲109-2


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多