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