系统:Windows 7
软件:Excel 2016
- 本系列讲讲Excel中使用窗体实现一个简单的小项目:学习成绩查询
- 本文介绍一个新的控件ListView,同样实现如何通过学生姓名、科目、第几次模拟考多条件查询
Part 1:实现功能
- 业务逻辑同样是:根据学生姓名、科目、第几次模拟考三个条件进行结果查询
- 有同学说使用ListBox控件时,发现无法实现显示10列以上的数据。ListBox的显示列数通过对控件的ColumnCount进行设置,当设置为15时,加入数据后,发现报错
- 从业务需求上来说,显示10列以上是一个很正常的需求,那怎么实现呢?网上搜索了一下,发现一个比较好用的控件ListView
- 使用ListView重新实现需求功能,然后再看看列数是否受限制,以及有什么其它好玩的功能
ColumnCount设置
报错
ListView查询静图
ListView查询动图
Part 2: ListView
- 默认情况下是没有ListView控件的,需要手工添加。工具箱-附件控件-Microsoft ListView Control,Version 6.0。具体操作如下图
- 界面设置,复制原成绩查询界面,删除原ListBox控件,新增ListView控件,表面上看起来是一样的
- 对于不变的控件,修改每个控件的变量名称,在原来基础加V即可,方便修改代码
添加新控件
ListView控件
成绩查询-ListView
控件对应变量名
Part 3: 代码
主代码
Private Sub outputSearchV_Click()
Set ctrlStudent = Me.Controls("outputStudentNameV")
studentName = ctrlStudent.Value
Set ctrlCourse = Me.Controls("outputCourseNameV")
courseName = ctrlCourse.Value
Set ctrlExam = Me.Controls("outputWhichExamV")
exam = ctrlExam.Value
If studentName = "" And courseName = "" And exam = "" Then
MsgBox "请输入查询条件"
Exit Sub
End If
Set ctrl = Me.Controls("outputListView")
' 清空原标题
ctrl.ColumnHeaders.Clear
' 加上标题
ctrl.ColumnHeaders.Add , , "序号"
ctrl.ColumnHeaders.Add , , "姓名"
ctrl.ColumnHeaders.Add , , "科目"
ctrl.ColumnHeaders.Add , , "第几次模拟考"
ctrl.ColumnHeaders.Add , , "成绩"
ctrl.View = lvwReport
ctrl.FullRowSelect = True
ctrl.Gridlines = True
'清空其它数据
ctrl.ListItems.Clear
Set shtDb = ThisWorkbook.Worksheets("学生成绩db")
maxRow = shtDb.Cells(Rows.Count, "B").End(xlUp).Row
inputNum = 1
flag = 0
For i = 2 To maxRow Step 1
existStudent = shtDb.Cells(i, "B")
existCourse = shtDb.Cells(i, "C")
existExam = CInt(shtDb.Cells(i, "D"))
check = 条件检测(existStudent, existCourse, existExam, studentName, courseName, exam)
If check = True Then
existNote = shtDb.Cells(i, "E")
Set Item = ctrl.ListItems.Add()
Item.Text = inputNum
Item.SubItems(1) = existStudent
Item.SubItems(2) = existCourse
Item.SubItems(3) = existExam
Item.SubItems(4) = existNote
inputNum = inputNum + 1
flag = 1
End If
Next i
If flag = 1 Then
MsgBox "查询完毕,请从下表查看结果"
Else
MsgBox "未查询到满足条件的结果"
End If
End Sub
代码截图
条件检测 函数
Function 条件检测(existStudent, existCourse, existExam, studentName, courseName, exam)
result = True
If studentName <> "" Then
If studentName <> existStudent Then
result = False
End If
End If
If courseName <> "" Then
If courseName <> existCourse Then
result = False
End If
End If
If exam <> "" Then
If CInt(exam) <> existExam Then
result = False
End If
End If
条件检测 = result
End Function
代码截图
Part 4: 部分代码解读
- 代码整体逻辑和上一篇文章一样。只是涉及到ListView这块的操作不同
-
ctrl.ColumnHeaders.Clear
清空标题;ctrl.ListItems.Clear
清空所有数据 -
ctrl.ColumnHeaders.Add , , "序号"
新增标题 -
ctrl.View = lvwReport
设置显示形式,显示类似Excel形式,这个也可以在控件的View属性中人工设置 -
ctrl.FullRowSelect = True
允许选中整行,False后效果如下图 -
ctrl.Gridlines = True
显示栅格线,False后效果如下图 - 新增一行内容:注意默认列从0开始计算,但第1列信息通过
Item.Text
增加,而不是Item.SubItems(0)
,真是有点奇怪呢
Set Item = ctrl.ListItems.Add()
Item.Text = inputNum
Item.SubItems(1) = existStudent
Item.SubItems(2) = existCourse
Item.SubItems(3) = existExam
Item.SubItems(4) = existNote
关闭整行选择和栅格线显示
- 更多学习交流,可加小编微信号
learningBin
更多精彩,请关注微信公众号
扫描二维码,关注本公众号