学习资源:《Excel VBA从入门到进阶》第59集 by兰色幻想
本节学习Listview控件,它可以用多种视图方式显示项目的控件。由于其外形美观而且非常实用,所以使用频率很高。
Listview控件需要添加到控件工具箱才能插入和使用。
在工具箱,右键附加控件,找到Microsoft ListView Control。如果找不到的话需要到网上下载MSCOMCTL.OCX,同时也要看看自己的office是多少位的,如果是64位的,那就得换成32位的office。
添加之后,我们就可以在工具箱找到listview,点击后把光标移到窗体上就能新建个listview。
Listview有两大部分组成,一部分是列标题Columnheaders,另一部分是项目Listitems。见下图:
ListSubitems可以用来表示除第一列Text之外的其他Subitems的集合。
本篇先写数据导入的方法。
1.设置列标题ColumnHeaders
listitem1.ColumnHeaders.Add 列数,key(一列的唯一标识),标题,宽度,对齐方式,显示的图标
有六个参数:
①列数:要设置第几列
②key(一列的唯一标识):自己设置一个值标记这一列,比如设置一个字母。
③标题:列标题
④宽度:列宽,可以按listview宽度除以列数,比如写为 “ListView1.Width / 3”
⑤对齐方式:有三种,vwcolumncenter居中对齐,lvwcolumnleft左对齐,lvwcolumnright.右对齐
⑥显示的图标:下节课讲。
例:
ListView1.ColumnHeaders.Add 1, "Q", "QQ号", ListView1.Width / 3,lvwcolumnleftter ListView1.ColumnHeaders.Add 2, "N", "昵称", ListView1.Width / 3, vwcolumncenter ListView1.ColumnHeaders.Add 3, "D", "地区", ListView1.Width / 3, vwcolumnright
2.控件的显示外观
一般都设置为lvwReport ,设置为报告格式 。
ListView1.View = lvwReport
3.设置表格线
如果需要表格线把ListView1.Gridlines设置为True(如下),不需要的设置为False。
ListView1.Gridlines = True
4.使用SubItems数组添加数据
添加数据时,首先要添加一ListItems是行对象的集合。
Set ITM = ListView1.ListItems.Add()
然后使用循环,把单元格数值赋值给Subitem。
For i = 2 To [A65536].End(xlUp).Row
Set ITM = ListView1.ListItems.Add()
ITM.Text = Cells(i, 1)
ITM.SubItems(1) = Cells(i, 2)
ITM.SubItems(2) = Cells(i, 3)
Next i
5. 使用Listsubitems集合添加数据
与SubItems不同,Listsubitems在添加行对象时,直接可以添加一行,然后添加的每一行使用对行对象增加一行的方式进行赋值。
For i = 2 To [A5536].End(xlUp).Row '使用Listsubitems集合添加数据
Set list = ListView1.ListItems.Add(Text:=Cells(i, 1))'设置行对象list,并增加新的一行
Set li = list.ListSubItems.Add(Text:=Cells(i, 2))'对对象集合list增加新的一列
Set li = list.ListSubItems.Add(Text:=Cells(i, 3))'对对象集合list再增加新的一列
Next i
注意:SubItems和ListSubItems的区别,SubItems是一个string类型的数组,ListSubItems是一个集合。
6.删除行
这里就用到之前设置的key,行标识来标识行。
ListView1.ColumnHeaders.Remove “D” '删除key是D的列。
汇总:
把以下表格的值赋值到listview里显示:
插入控件:
写代码:
Private Sub UserForm_Initialize()
Dim i
Dim ITM As ListItem, list
ListView1.ColumnHeaders.Add 1, "Q", "QQ号", ListView1.Width / 3
ListView1.ColumnHeaders.Add 2, "N", "昵称", ListView1.Width / 3, vwcolumncenter
ListView1.ColumnHeaders.Add 3, "D", "地区", ListView1.Width / 3, vwcolumnright
'listitem1.ColumnHeaders.Add 列数, key(一列的唯一标识). 标题,宽度,对齐方式,显示的图标
'第一列只能左对齐,所以可以不写对齐方式
'columnheaders是标题行
'lvwcolumncenter居中对齐,lvwcolumnleft左对齐,lvwcolumnright.右对齐
ListView1.View = lvwReport 'listview控件的显示外观
ListView1.Gridlines = True '是否有表格线,True有表格线
'使用Listsubitems集合添加数据
For i = 2 To [A5536].End(xlUp).Row
Set list = ListView1.ListItems.Add(Text:=Cells(i, 1)) '增加新的一行
Set li = list.ListSubItems.Add(Text:=Cells(i, 2)) '对对象集合增加新的一列
Set li = list.ListSubItems.Add(Text:=Cells(i, 3))
Next i
End Sub
运行结果:
这节课学的特别困难(捂脸
首先遇到的问题是没有课件,为了写笔记只好看着视频抄代码,然后发现没有listview控件,查了很久原因,最后是到学习群问到了解决方法(就是这篇文章开头说的)。然后运行的时候弹出“找不到工程或库",解决方法:在工具-引用,把有”missing”,“丢失”,“找不到“字眼的引用取消勾选。
不过这些都解决啦!
而且我因为会VBA,给面试官留了很深的印象,再一次获得心仪公司的面试机会!多学点总是没有坏处,加油,我一定把这个专栏更完的!
Listview很重要,而内容较多,所以我准备发成几篇发,方便以后查阅。



