美文网首页
Excel-窗体项目-学习成绩查询-08-ListView多列及

Excel-窗体项目-学习成绩查询-08-ListView多列及

作者: Data_Python_VBA | 来源:发表于2020-03-27 22:47 被阅读0次

微信公众号原文

系统:Windows 7
软件:Excel 2016

  • 本系列讲讲Excel中使用窗体实现一个简单的小项目:学习成绩查询
  • 今天继续介绍一个控件ListView,说说如何实现10列以上的显示,以及如何设置列的对齐方式和列宽度

Part 1:实现功能

  1. 业务逻辑同样是:根据学生姓名、科目、第几次模拟考三个条件进行结果查询
  2. 设置前4列的宽度及对齐方式

ListView查询静图

3.png

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

代码截图

4.png 5.png 6.png

条件检测 函数

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

代码截图

1.png

Part 3: 部分代码解读

  1. ctrl.ColumnHeaders.Add , , "序号", 30, lvwColumnLeftAdd方法对应5个参数,前面2个没用过,后面三个含义分别为:列名列宽列对齐方式
    • 关于列宽的单位我也不知道,大家可以试一试,通过效果人工调整数值
    • 列对齐方式:lvwColumnLeft(左对齐),lvwColumnCenter(居中),lvwColumnRight(右对齐)
    • 第1列必须为左对齐,否则会报错
    • 所有列默认为左对齐
  2. 对于ListView上限是多少列,还不知道,目前来看15列是没有问题的,而且无需设置控件属性,直接代码层加入即可

设置第1列为右对齐

2.png

报错

1.png
  • 更多学习交流,可加小编微信号learningBin

更多精彩,请关注微信公众号
扫描二维码,关注本公众号

公众号底部二维码.jpg

相关文章

网友评论

      本文标题:Excel-窗体项目-学习成绩查询-08-ListView多列及

      本文链接:https://www.haomeiwen.com/subject/xfqduhtx.html