VBA中如何使用ListBox控件呢?

VBA中如何使用ListBox控件呢?,第1张

ListBox 控件显示项目列表,从其中可以选择一项或多项。如果项目总数超过了可显示的项目数,就自动在 ListBox 控件上添加滚动条。
如果未选定项目,则 ListIndex 属性值是 -1。列表的第一项是 ListIndex 0,ListCount 属性值总是比最大的 ListIndex 值大 1。

语法
ListBox

说明
使用 AddItem 或者 RemoveItem 方法可以添加或者删除 ListBox 控件中的项目。对 List、ListCount 和 ListIndex 属性进行设置就可以访问 ListBox 中的项目。也可以在设计时使用 List 属性在列表中增加项目。

实例

   Dim Entry, I, Msg   ' 声明变量。
   Msg = "Choose OK to add 100 items to your list box"
   MsgBox Msg   ' 显示信息。
   For I = 1 To 100   ' 计数值从 1 到 100。
      Entry = "Entry " & I   ' 创建输入项。
      List1AddItem Entry   ' 添加该输入项。
   Next I
   Msg = "Choose OK to remove every other entry"
   MsgBox Msg   ' 显示信息。
   For I = 1 To 50   ' 确定如何
      List1RemoveItem I   ' 每隔一项
   Next I   ' 删除。
   Msg = "Choose OK to remove all items from the list box"
   MsgBox Msg   ' 显示信息。
   List1Clear   ' 清除列表框。

可以用循环的方法,通过List控件的listCount,获得LIST1的行数,然后一行行地添加到LIST2中:
Private
Sub
Command1_Click()
For
i
=
0
To
List1ListCount
-
1
List2AddItem
List1List(i)
Next
End
Sub

ListView控件的最基本用法是在窗体中以表格形式显示数据,是应用非常广泛的一个窗体控件。控件工具箱在初始状态下是没有ListView控
件的,需要我们在工具-附加控件中勾选"Microsoft ListView Control,Version
60",这样ListView控件就会显示在控件工具箱中了。ListView分为表头和数据两部分,而数据部分的第一列和其他列又是分开的,需要用不
同的方式来访问。假设我们在Sheet1中有一个5行4列的表格,现在我们看下怎样将这个表格中的数据导入到ListView控件中。
下面我们先来看怎样给ListView控件添加表头。有两种方法,先来看第一种
Private Sub UserForm_Initialize()
ListView1ColumnHeadersAdd 1, "A", "姓名", ListView1Width / 4, lvwColumnLeft '列数,key,text,宽度,对齐方式,
ListView1ColumnHeadersAdd 2, "B", "性别", ListView1Width / 4, lvwColumnCenter
ListView1ColumnHeadersAdd 3, "C", "年龄", ListView1Width / 4, lvwColumnCenter
ListView1ColumnHeadersAdd 4, "D", "住址", ListView1Width / 4, lvwColumnCenter
ListView1View = lvwReport '显示方式
ListView1FullRowSelect = False '是否整行选取
ListView1Gridlines = True '是否显示表格线
End Sub
添加表头的第一种方法是用ColumnHeadersAdd的方法,该方法包括6个参数,比如上面第一行代码中1代表第一列,"A"是该列的一个
简称(不写也可以),“姓名”是要显示的文字,下一个参数是宽度,这里我们一共4列,所以第一列宽度设为控件宽度(ListView1Width)的
1/4,第5个参数是对齐方式,其中第一列必须是左对齐的,其他列可以设置左右或居中对齐,第6个参数是图标索引,我们后面再讲,这里其中所有的参数都是
可省略的,一般写上显示的文字和宽度即可。ListView1View是设置ListView控件的显示方式,一共四种,这里lvwReport是报表
形式显示,其他的我们后面再讲。FullRowSelect是指可否整行选取,Gridlines是否显示网格线,这些属性自己试下就知道了。
当然我们也可以用循环的方式来简化代码
Private Sub UserForm_Initialize()
Dim i
For i = 1 To 4
ListView1ColumnHeadersAdd i, , Cells(1, i), ListView1Width / 4
Next
ListView1FullRowSelect = True
ListView1View = lvwReport
ListView1Gridlines = True
End Sub
对列加了个For循环而已,其实是完全相同的。
下面我们来看怎样向ListView控件中添加数据。两种方法,下面来看第一种
Private Sub CommandButton1_Click()
Dim itm As ListItem, i, List, li
ListView1ListItemsClear '清除数据
For i = 2 To 5
Set itm = ListView1ListItemsAdd '添加一个空行
itmText = Cells(i, 1) '添加第一列
itmSubItems(1) = Cells(i, 2) '添加第二列
itmSubItems(2) = Cells(i, 3)
itmSubItems(3) = Cells(i, 4)
Next
End Sub
当然添加新数据之前要把原有数据先删除,用的是ListItems的Clear方法ListItem对象就是控件的行。先用ListItems的
Add方法添加一个空行,用变量itm来表示,下面就要向这个空行中添加数据,我们上面说过第一列和其他列的表示方法是不同的,第一列赋值要用Text,
之后各列用SubItems数组来赋值,第2列序号是1,第3列序号是2,依次类推。
下面来看添加数据的另一种方法,ListSubItems对象
' For i = 2 To 5
' Set List = ListView1ListItemsAdd(Text:=Cells(i, 1))
' Set li = ListListSubItemsAdd(Text:=Cells(i, 2)) 'subitems是个数组,Listsubitems是个对象集合
' Set li = ListListSubItemsAdd(Text:=Cells(i, 3))
' Set li = ListListSubItemsAdd(Text:=Cells(i, 4))
' Next
前面都一样,我只把For循环这段贴出来了,同样是用ListItemsAdd新建一个空行,不同的是直接给其赋了一个值,这个值就是赋在第一列
的,之后又用List(刚添加的空行)的ListSubItems的Add方法,相当于在该行添加一个列,再赋值,有几列就添加用个
ListSubItems。ListSubItems和SubItems的区别在于前者是一个对象集合,既然是对象就有可以设置格式(可以和工作表的
Range对象类比),而后者仅仅是一个数组,因此也就不存在格式之类的属性了,所以如果需要给ListView控件改变格式就要用
ListSubItems对象。

追问: 恩是的 如果我想让里面的内容分类显示 比如我想查production的内容 查找后只显示production里的内容 怎么办啊 回答: 直接构造个满足条件的SQL语句不就可以了么sql="select 字段 from 表名 where 名称='Production'"然后执行SQL语句 再用FOR循环 将返回的记录集 添加到list控件中 追问: for 循环怎么将返回的记录集添加到list中啊 麻烦你详细点 谢谢 追问: 我的界面是这样的我想让我选择男后就让下面的控件中只显示性别为男的数据 回答: 给你写了个比较简陋的 满足你要求的代码 其余的自己扩展一下吧 带说明Dim link As New ADODBRecordsetDim sql As String '查询语句Public Sub runsql(sql As String) '用来运行SQL语句conn = "Provider=MicrosoftJetOLEDB40;Data Source=" + AppPath + "\db1mdb;Persist Security Info=False"If linkState = 1 ThenlinkCloseEnd IflinkOpen sql, conn, 1, 3End SubPrivate Sub Command1_Click()' 点击后将性别为男的 姓名放入LIST中Call runsql("select 姓名 from 表1 where 性别='男'")For i = 0 To linkRecordCount - 1List1AddItem linkFields(0)If linkEOF = False ThenlinkMoveNextEnd IfNext iEnd SubPrivate Sub Form_Load()'运行后 显示所有记录Call runsql("select from 表1")Set MSHFlexGrid1DataSource = linkMSHFlexGrid1RefreshEnd SubPrivate Sub Option1_Click()'查看所有男的记录Call runsql("select from 表1 where 性别='男'")


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13390334.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-27
下一篇 2023-07-27

发表评论

登录后才能评论

评论列表(0条)

保存