分享

Excel-窗体项目-学习成绩查询-07-多条件查询之ListView

 書生的图书馆 2022-04-17

系统:Windows 7

软件:Excel 2016

Here We Are
  • 本系列讲讲Excel中使用窗体实现一个简单的小项目:

    学习成绩查询

  • 本文介绍一个新的控件ListView,同样实现如何通过学生姓名、科目、第几次模拟考多条件查询

Part 1:实现功能

图片
  1. 业务逻辑同样是:根据学生姓名、科目、第几次模拟考三个条件进行结果查询

  2. 有同学说使用ListBox控件时,发现无法实现显示10列以上的数据。ListBox的显示列数通过对控件的ColumnCount进行设置,当设置为15时,加入数据后,发现报错

  3. 从业务需求上来说,显示10列以上是一个很正常的需求,那怎么实现呢?网上搜索了一下,发现一个比较好用的控件ListView

  4. 使用ListView重新实现需求功能,然后再看看列数是否受限制,以及有什么其它好玩的功能

ColumnCount设置

图片

报错

图片

ListView查询静图


图片

ListView查询动图

图片

Part 2:ListView

图片
  1. 默认情况下是没有ListView控件的,需要手工添加。工具箱-附件控件-Microsoft ListView Control,Version 6.0。具体操作如下图

  2. 界面设置,复制原成绩查询界面,删除原ListBox控件,新增ListView控件,表面上看起来是一样的

  3. 对于不变的控件,修改每个控件的变量名称,在原来基础加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 IfEnd 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:部分代码解读

图片
  1. 代码整体逻辑和上一篇文章一样。只是涉及到ListView这块的操作不同

  2. ctrl.ColumnHeaders.Clear清空标题;ctrl.ListItems.Clear清空所有数据

  3. ctrl.ColumnHeaders.Add , , '序号'新增标题

  4. ctrl.View = lvwReport设置显示形式,显示类似Excel形式,这个也可以在控件的View属性中人工设置

  5. ctrl.FullRowSelect = True允许选中整行,False后效果如下图

  6. ctrl.Gridlines = True显示栅格线,False后效果如下图

  7. 新增一行内容:注意默认列从0开始计算,但第1列信息通过Item.Text增加,而不是Item.SubItems(0),真是有点奇怪呢

Set Item = ctrl.ListItems.Add()Item.Text = inputNumItem.SubItems(1) = existStudentItem.SubItems(2) = existCourseItem.SubItems(3) = existExamItem.SubItems(4) = existNote

关闭整行选择和栅格线显示


图片


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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多