系统:Windows 7
软件:Excel 2016
- 本系列讲讲Excel中使用窗体实现一个简单的小项目:学习成绩查询
- 今天继续介绍一个控件ListView,说说如何实现10列以上的显示,以及如何设置列的对齐方式和列宽度
Part 1:实现功能
- 业务逻辑同样是:根据学生姓名、科目、第几次模拟考三个条件进行结果查询
- 设置前4列的宽度及对齐方式
ListView查询静图

Part 2: 代码
主代码
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 , , "序号", 30, lvwColumnLeft
ctrl.ColumnHeaders.Add , , "姓名", 50, lvwColumnLeft
ctrl.ColumnHeaders.Add , , "科目", 60, lvwColumnCenter
ctrl.ColumnHeaders.Add , , "第几次模拟考", 30, lvwColumnRight
ctrl.ColumnHeaders.Add , , "成绩"
ctrl.ColumnHeaders.Add , , "6"
ctrl.ColumnHeaders.Add , , "7"
ctrl.ColumnHeaders.Add , , "8"
ctrl.ColumnHeaders.Add , , "9"
ctrl.ColumnHeaders.Add , , "10"
ctrl.ColumnHeaders.Add , , "11"
ctrl.ColumnHeaders.Add , , "12"
ctrl.ColumnHeaders.Add , , "13"
ctrl.ColumnHeaders.Add , , "14"
ctrl.ColumnHeaders.Add , , "15"
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
Item.SubItems(5) = 5
Item.SubItems(6) = 6
Item.SubItems(7) = 7
Item.SubItems(8) = 8
Item.SubItems(9) = 9
Item.SubItems(10) = 10
Item.SubItems(11) = 11
Item.SubItems(12) = 12
Item.SubItems(13) = 13
Item.SubItems(14) = 14
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 3: 部分代码解读
-
ctrl.ColumnHeaders.Add , , "序号", 30, lvwColumnLeft
,Add方法对应5个参数,前面2个没用过,后面三个含义分别为:列名,列宽,列对齐方式- 关于列宽的单位我也不知道,大家可以试一试,通过效果人工调整数值
- 列对齐方式:lvwColumnLeft(左对齐),lvwColumnCenter(居中),lvwColumnRight(右对齐)
- 第1列必须为左对齐,否则会报错
- 所有列默认为左对齐
- 对于ListView上限是多少列,还不知道,目前来看15列是没有问题的,而且无需设置控件属性,直接代码层加入即可
设置第1列为右对齐

报错

- 更多学习交流,可加小编微信号
learningBin
更多精彩,请关注微信公众号
扫描二维码,关注本公众号

网友评论