Excel VBA高效办公应用-第十章-高效处理学员资料-Part2 (考勤记录表)

这个示例的意义在于,当数据量较大时,通过在用户窗体中提供筛选条件,帮助用户快速获取期望数据。

但应为使用多重筛选也能实现同样功能,所以,这里的做法有点鸡肋啊。



Option Explicit

Private Sub ComboBox1_Change()
    showall '每次组合框变化都会调用函数showall
End Sub

Private Sub ComboBox2_Change()
    showall '每次组合框变化都会调用函数showall
End Sub

Private Sub ComboBox3_Change()
    showall '每次组合框变化都会调用函数showall
End Sub

Private Sub UserForm_Activate()
    ComboBox1.AddItem "全部月份" '显示所有月份
    ComboBox1.AddItem 1 '显示1月的数据
    ComboBox1.AddItem 2 '显示2月的数据
    ComboBox1.AddItem 3 '显示3月的数据
    ComboBox1.AddItem 4 '显示4月的数据
    ComboBox2.AddItem "2次及以上的同学" '加入对迟到次数的提示
    ComboBox2.AddItem "3次及以上的同学" '加入对迟到次数的提示
    ComboBox2.AddItem "不限次数" '加入对迟到次数的提示
    ComboBox3.AddItem "2次及以上的同学" '加入对旷课次数的提示
    ComboBox3.AddItem "3次及以上的同学" '加入对旷课次数的提示
    ComboBox3.AddItem "不限次数" '加入对旷课次数的提示
End Sub
Sub showall()
    showmonth '调用showmonth显示相关月份的所有数据
    showtimes '调用showtimes显示满足迟到次数的所有数据
    showAbsenceTimes '调用showtimes显示满足旷课次数的所有数据
End Sub
Sub showmonth()
        '选择所有月份的数据
    Range(Cells(1, 1), Cells(33, 13)).Select
        '显示所有月份的数据
    Selection.EntireRow.Hidden = False
    '判断选择了组合框的那一项
    Select Case ComboBox1.ListIndex
        Case 0 '表示选择了显示全部月份
        Case 1 '表示选择了显示1月份
                '选择1月份的数据
            Range(Cells(12, 1), Cells(33, 13)).Select
                '显示1月份的数据
            Selection.EntireRow.Hidden = True
        Case 2 '表示选择了显示2月份
            Range(Cells(1, 1), Cells(11, 13)).Select
            Selection.EntireRow.Hidden = True
            Range(Cells(21, 1), Cells(33, 13)).Select
            Selection.EntireRow.Hidden = True
        Case 3 '表示选择了显示3月份
            Range(Cells(1, 1), Cells(22, 13)).Select
            Selection.EntireRow.Hidden = True
        Case Else '选择其它月份
            MsgBox "暂时没有其它月份的数据"
    End Select
End Sub
Sub showtimes()
Dim i As Integer, Irow As Integer
Dim Inum(3) As Integer '定义数组Inum,用来表示限制的次数
    Inum(0) = -1 '什么都不选时表示限制次数为-1
    Inum(1) = 2 '选择第1项时表示限制次数为2
    Inum(2) = 3 '选择第2项时表示限制次数为3
    Inum(3) = -1 '什选择第3项时表示限制次数为-1,也就是不限制次数
        '取得当前可见的单元格的行数
    Irow = Range("A1").CurrentRegion.Rows.Count
    For i = 2 To Irow
        '逐个判断迟到次数是否满足选定的条件
      If (Cells(i, 12).Value < Inum(ComboBox2.ListIndex + 1)) Then
        '不满足的就隐藏
         Rows(i).Hidden = True
      End If
    Next i
End Sub
Sub showAbsenceTimes()
Dim i As Integer, Irow As Integer
Dim Inum(3) As Integer '定义数组Inum,用来表示限制的次数
    Inum(0) = -1 '什么都不选时表示限制次数为-1
    Inum(1) = 2 '选择第1项时表示限制次数为2
    Inum(2) = 3 '选择第2项时表示限制次数为3
    Inum(3) = -1 '选择第3项时表示限制次数为-1,也就是不限制次数
        '取得当前可见的单元格的行数
    Irow = Range("A1").CurrentRegion.Rows.Count
    For i = 2 To Irow
        '逐个判断旷课次数是否满足选定的条件
      If (Cells(i, 13).Value < Inum(ComboBox3.ListIndex + 1)) Then
        '不满足的就隐藏
         Rows(i).Hidden = True
      End If
    Next i
End Sub


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值