ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1355|回复: 0

分页代码Excel 类模块

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-3-1 14:17 | 显示全部楼层 |阅读模式

Option Explicit


Dim rs As ADODB.Recordset
Dim rsds As ADODB.Recordset
Dim rsPage As Long  '当前处于第几页
Dim labelName As String

'分页查询
Sub queryPageFromRS(r As ADODB.Recordset, lbName As String)
rsPage = 1

  labelName = lbName
    Set rs = r
   Call addrows(rsPage) '调用子过程显示第一页记录


End Sub

'分页查询
Sub queryPage(sql As String, lbName As String)
rsPage = 1

  labelName = lbName
    Dim cba As New DBhelper
    Set rs = cba.query(sql)

   Call addrows(rsPage) '调用子过程显示第一页记录


End Sub

Private Sub clearContents()

Range("A4:AA18").clearContents

End Sub
Private Sub addrows(mypage As Long)
     On Error Resume Next
     Dim i As Long, j As Long
     Dim num As Long, endrow As Long  '记数

     '创建局部recorset对象rsds,保存rs 记录集中当前页的数据
     Set rsds = New ADODB.Recordset
     For i = 0 To rs.fields.Count - 1
     'append追加的意思,字段名称,字段类型,字段大小
        rsds.fields.Append rs.fields(i).Name, rs.fields(i).Type, rs.fields(i).DefinedSize
     Next
     '打开局部recorset 对象rsds
     rsds.Open
     rs.PageSize = 15 '重置rs 每页显示的记录条数(pagesize 表示记录集的每页的记录条数)
     rs.AbsolutePage = mypage '重置rs的当前记录页(跳到这页的第一条记录)
     '当rs 的当前记录页保存到rsds 之中
     For i = 1 To CLng(rs.PageSize)

         If rs.EOF Then Exit For

        rsds.AddNew '添加一条记录
        For j = 0 To rs.fields.Count - 1
          rsds.fields(j).value = rs.fields(j).value
        Next j

        rs.MoveNext
     Next i

     rsds.MoveFirst '定位到第一条记录

  clearContents

     '添加记录i的类型在32位系统自动为integer或long,在64位自动为longlong,数据转换,不然会编译错误类型不匹配

        For i = 4 To CLng(rsds.RecordCount) + 3

            num = num + 1
            Cells(i, 1) = IIf(mypage > 1, num + rs.PageSize * (mypage - 1), num)

             Cells(i, rsds.fields.Count + 1) = CStr(rsds.fields(0))
            For j = 1 To rsds.fields.Count - 1

            Cells(i, j + 1) = rsds.fields(j)
            If rsds.fields(j).Type = adDate Then
            Cells(i, j + 1).NumberFormatLocal = "YYYY-MM-DD"
            End If

            Next j

            rsds.MoveNext
         Next i

       ' ActiveSheet.OLEObjects(labelName).Object.caption = "第 " & mypage & "/" & rs.PageCount & " 页,共" & rs.RecordCount & "条记录"
ActiveSheet.Shapes(labelName).TextFrame.Characters.Text = "第 " & mypage & "/" & rs.PageCount & " 页,共" & rs.RecordCount & "条记录"
'  plabelText = "第 " & mypage & "/" & rs.PageCount & " 页,共" & rs.RecordCount & "条记录"
   ' lb = ActiveSheet.OLEObjects(labelName).Object


'endrow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "B").End(xlUp).Row
'If endrow > 3 Then
  With Range("A4" & ":AA18").Borders
   .LineStyle = xlContinuous
   .Weight = xlThin
   .ColorIndex = 37
  End With
'End If

End Sub


'切换到第一页
Sub dyy_Click()

rsPage = 1
Call addrows(rsPage)

End Sub
'切换到上一页
Sub syy_Click()

If rsPage > 1 And CLng(rs.PageCount) > 0 Then
rsPage = rsPage - 1
Call addrows(rsPage)
End If

End Sub



'切换到下一页
Sub xyy_Click()

If rsPage <> CLng(rs.PageCount) And CLng(rs.PageCount) > 0 Then
rsPage = rsPage + 1
Call addrows(rsPage)

End If

End Sub
'切换到最末页
Sub zmy_Click()

'64位longlong类型 转换32位为long
rsPage = CLng(rs.PageCount)
Call addrows(rsPage)

End Sub





Private Sub Class_Terminate()
Set rs = Nothing
Set rsds = Nothing
End Sub


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-23 05:04 , Processed in 0.033499 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表