Excel VBA 每天一段代码:自定义分页函数
3月12日视频《Excel VBA 网友答疑:ActiveX控件实现数据分页、翻页》中,我自定义了函数 窗体数据查询(),现将代码公布如下:
参数说明:
1、ItemNum 每页显示的数据数量(由复合框下拉选择)
2、CPageNum 当前显示第几页数据(调用函数时指定)
Function 窗体数据查询(ByVal ItemNum As Integer, ByVal CPageNum As Integer)
On Error Resume Next
Dim arr, brr(1 To 100000, 1 To 9), crr, i&, PageNum As String
arr = Sheet2.Range("A1").CurrentRegion
'清空临时区数据
h = Sheet2.Cells(Rows.Count, "O").Row
If h >= 2 Then
Sheets("数据展示").Range("O2:W" & h).ClearContents
End If
'计算总页数(总数据条数除以每页显示条数,余数为0,则总页数两者相除取整,否则两者相除取整再+1)
If UBound(arr) - 1 Mod ItemNum = 0 Then
总页数 = Int((UBound(arr) - 1) / ItemNum)
Else
总页数 = Int((UBound(arr) - 1) / ItemNum) + 1
End If
'数据总数
查询结果.Label4.Caption = "共有 " & UBound(arr) - 1 & " 条数据"
'分页显示:例如 1/100
PageNum = CPageNum & "/" & 总页数 '分页列表
查询结果.ComboBox2.Value = PageNum
'获取每页数据在数组的起始行、结束行
起始行 = (CPageNum - 1) * ItemNum + 1 + 1
结束行 = (CPageNum - 1) * ItemNum + 1 + ItemNum
'获得当前页数,在翻页的时候有用
当前页数 = CPageNum
'提取数据写入brr数组
For i = 起始行 To 结束行
n = n + 1
For j = 1 To UBound(arr, 2)
brr(n, j) = arr(i, j)
Next j
Next i
For i = 1 To UBound(brr)
brr(i, 2) = VBA.Format(brr(i, 2), "yyyy-mm-dd hh:nn:ss")
brr(i, 3) = VBA.Format(brr(i, 3), "yyyy-mm-dd hh:nn:ss")
Next i
'将数组brr放到临时区域
Sheet2.Range("O2").Resize(n, UBound(brr, 2)) = brr
'将临时提取的数据在ListBox1中显示
crr = Sheet2.Range("O2").CurrentRegion
With 查询结果.ListBox1
.ColumnHeads = True
.ColumnCount = UBound(crr, 2)
.ColumnWidths = "70,100,100,70,50,50,50,50,50"
If UBound(brr) >= 2 Then
.RowSource = Sheet2.Range("O2:W" & UBound(crr)).Address
Else
.RowSource = Sheet2.Range("O2:W3").Address
End If
End With
End Function