Office中國(guó)論壇/Access中國(guó)論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

返回列表 發(fā)新帖
查看: 27435|回復(fù): 84
打印 上一主題 下一主題

[報(bào)表] 報(bào)表分組頁(yè)碼終極解決方案

[復(fù)制鏈接]

點(diǎn)擊這里給我發(fā)消息

跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2009-5-30 15:29:56 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 t小寶 于 2009-5-30 15:39 編輯

最近又看到在關(guān)報(bào)表分組頁(yè)碼的帖子,也來(lái)湊下熱鬧。
一年前曾要使用在報(bào)表顯示分組頁(yè)碼和頁(yè)數(shù)的功能,網(wǎng)上苦苦尋覓而不得,于是硬著頭皮研究,終于得出
兩種方法。
后來(lái)才發(fā)現(xiàn)2004年在access中國(guó)已經(jīng)有人提出這樣的問(wèn)題,并有解決方法,是這個(gè)帖子:
http://ctxi.cn/forum.php?mod=viewthread&tid=19213&highlight=%D7%E9%2B%D2%B3
不過(guò)在預(yù)覽報(bào)表時(shí)改變頁(yè)面設(shè)置(邊距、大小、方向等)后,頁(yè)碼顯示出現(xiàn)錯(cuò)亂;
再后來(lái)又在微軟網(wǎng)站看到一篇專(zhuān)門(mén)解決此問(wèn)題的kb文章:
http://support.microsoft.com/kb/841779/zh-cn?spid=1265&sid=98,
其需要另建一個(gè)表,并使用記錄集,顯示效果比較好,但在某些情況下改變頁(yè)面設(shè)置還是會(huì)出現(xiàn)頁(yè)碼顯示
錯(cuò)亂。
而本人的方法經(jīng)本人測(cè)試,改變頁(yè)面設(shè)置無(wú)頁(yè)碼顯示錯(cuò)亂現(xiàn)象,因此斗膽稱(chēng)為終極解決方案,請(qǐng)大家測(cè)試
和批評(píng),也許還有更好的方法。
做成了類(lèi)模塊,有一點(diǎn)注釋但很難講明白,如果誰(shuí)要研究實(shí)現(xiàn)原理可以和我交流。其實(shí)上面說(shuō)的兩個(gè)方法的實(shí)現(xiàn)原
理我也不清楚,很多事情知道用就行了。


'分組報(bào)表顯示分組頁(yè)碼和頁(yè)數(shù)(方法一)
'
'功    能:在有分組的報(bào)表的每一頁(yè)上顯示組頁(yè)碼和組頁(yè)數(shù),在預(yù)
'         覽時(shí)改變頁(yè)面設(shè)置后仍能正確顯示。
'作    者:t小雨(
[email=tcl013@126.com)(t]tcl013@126.com)(t[/email]小寶)
'版    本:1.1
'創(chuàng)建日期:2008-05-??
'整理日期:2009-05-30
'補(bǔ)充說(shuō)明:這個(gè)代碼是一年前做的,由于實(shí)現(xiàn)原理和過(guò)程有點(diǎn)復(fù)雜,
'         當(dāng)時(shí)沒(méi)有添加注釋?zhuān)淹貌畈欢,加上表達(dá)能力有限,
'         現(xiàn)在勉強(qiáng)添加了不完全的注釋?zhuān)芤勒照f(shuō)明會(huì)用就行。
'         直接把代碼放到報(bào)表中也是可以。
'         做成類(lèi)模塊只是為了好保存,以后調(diào)用方便,但由于在
'         類(lèi)模塊中不能使用報(bào)表的節(jié)的事件,調(diào)用起來(lái)還是有些
'         麻煩,不過(guò)總要比直接把代碼放在報(bào)表簡(jiǎn)單一點(diǎn)。
'
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

'實(shí)現(xiàn)原理:
'通過(guò)報(bào)表上的輔助文本框獲得組的總行數(shù)(記錄數(shù),后同)、1頁(yè)的最大行數(shù)、當(dāng)前頁(yè)在當(dāng)前組的截止行數(shù),
'在頁(yè)面頁(yè)腳_Format事件中通過(guò)計(jì)算得到分組頁(yè)碼和頁(yè)數(shù)。

'報(bào)表設(shè)計(jì)要求:
' 1、報(bào)表應(yīng)包含組頁(yè)眉、頁(yè)面頁(yè)眉、頁(yè)面頁(yè)腳
' 2、在組頁(yè)眉上有一文本框,有如下屬性
'    ControlSource(控件來(lái)源)="=Count(*)"
'    RunningSum(運(yùn)行總和)=0(不)
' 3、在主體有一文本框,有如下屬性
'    ControlSource(控件來(lái)源)="=1"
'    RunningSum(運(yùn)行總和)=1(工作組之上)

'調(diào)用方法,有2種:
' 第1種:

' 1、在報(bào)表用New關(guān)鍵字聲明一個(gè) CreateGroupPage1 類(lèi)的新實(shí)例
' 2、在報(bào)表的打開(kāi)事件執(zhí)行實(shí)例的 Init 方法,傳入全部參數(shù)
' 3、在頁(yè)面頁(yè)腳的 Format (格式化)事件執(zhí)行實(shí)例的 FormatPageFooter 方法
' 4、在頁(yè)面頁(yè)腳的 Print (打印)事件執(zhí)行實(shí)例的 PrintPageFooter 方法
' 這種方法在顯示分組頁(yè)碼的標(biāo)簽上顯示效果如 分組字段值: 1 / 2
' 在報(bào)表中的代碼類(lèi)似下面:

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Dim newGroupPage As New CreateGroupPage1
'
' Private Sub Report_Open(Cancel As Integer)
'     newGroupPage.Init Me, Me.TxtGrpRows, Me.txtRunSum, Me.LplGrpPages
' End Sub
'
' Private Sub 頁(yè)面頁(yè)腳_Format(Cancel As Integer, FormatCount As Integer)
'     newGroupPage.FormatPageFooter
' End Sub
'
' Private Sub 頁(yè)面頁(yè)腳_Print(Cancel As Integer, PrintCount As Integer)
'     newGroupPage.PrintPageFooter
' End Sub
'
' Private Sub 組頁(yè)眉0_Format(Cancel As Integer, FormatCount As Integer)
'     newGroupPage.FormatGroupLevel1Header
' End Sub

'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

' 第2種:
' 1、在報(bào)表用 WithEvents 關(guān)鍵字聲明一個(gè) CreateGroupPage1 類(lèi)的變量
' 2、在報(bào)表的打開(kāi)事件用 Set New 語(yǔ)句創(chuàng)建新實(shí)例
' 3、在報(bào)表的打開(kāi)事件執(zhí)行實(shí)例的 Init 方法,不須傳入最后一個(gè)參數(shù)(用于顯示分組頁(yè)碼的標(biāo)簽)
' 4、在頁(yè)面頁(yè)腳的 Format(格式化) 事件執(zhí)行實(shí)例的 FormatPageFooter 方法
' 5、在頁(yè)面頁(yè)腳的 Print(打印) 事件執(zhí)行實(shí)例的 PrintPageFooter 方法
' 6、在組頁(yè)眉的 Format(格式化) 事件執(zhí)行實(shí)例的 FormatGroupLevel1Header 方法
' 7、在類(lèi)的 Current 事件過(guò)程將事件參數(shù)返回的分組頁(yè)碼和頁(yè)數(shù)賦給用于顯示的標(biāo)簽
' 在報(bào)表中的代碼類(lèi)似下面:

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Dim WithEvents newGroupPage As CreateGroupPage1
'
' Private Sub Report_Open(Cancel As Integer)
'     Set newGroupPage = New CreateGroupPage1
'     newGroupPage.Init Me, Me.TxtGrpRows, Me.txtRunSum
' End Sub
'
' Private Sub 頁(yè)面頁(yè)腳_Format(Cancel As Integer, FormatCount As Integer)
'     newGroupPage.FormatPageFooter
' End Sub
'
' Private Sub 頁(yè)面頁(yè)腳_Print(Cancel As Integer, PrintCount As Integer)
'     newGroupPage.PrintPageFooter
' End Sub
'
' Private Sub 組頁(yè)眉0_Format(Cancel As Integer, FormatCount As Integer)
'     newGroupPage.FormatGroupLevel1Header
' End Sub
'
' Private Sub newGroupPage_Current(GrpPage As Integer, GrpPages As Integer)
'     Me.LplGrpPages.Caption = Me.類(lèi)別名稱(chēng) & " 共 " & GrpPages & " 頁(yè),第 " & GrpPage & " 頁(yè)"
' End Sub
'

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
類(lèi)模塊:
  1. Option Compare Database
  2. Option Explicit
  3. Public Event Current(GrpPage As Integer, GrpPages As Integer)
  4. '在此自定義事件中可以獲取分組頁(yè)碼信息,以便自定義顯示頁(yè)碼格式
  5. Dim MyRpt As Report
  6. Dim txtRunSum As TextBox           ' 取得每個(gè)組的記錄數(shù)的文本框
  7. Dim TxtGrpRows As TextBox          ' 取得每個(gè)組的記錄在組中的序號(hào)的文本框
  8. Dim lblShowPage As Label           ' 用于顯示分組頁(yè)碼信息的標(biāo)簽
  9. Dim inMaxRows As Integer           ' 1頁(yè)的最大行數(shù)(記錄數(shù))
  10. Dim inRptPage As Integer           ' 報(bào)表本身頁(yè)碼
  11. Dim blPrint As Boolean             ' 是否已經(jīng)發(fā)生頁(yè)面頁(yè)腳的Print事件,為避免頁(yè)面頁(yè)腳的Format事件中的代碼重復(fù)運(yùn)行
  12. Dim blFistPage As Boolean          ' 當(dāng)前頁(yè)是否是所在組的第一頁(yè)
  13. Public Sub Init(rpt As Report, GrpRows As TextBox, RunSum As TextBox, Optional ShowPage As Label)
  14. ' 過(guò)程中的檢查參數(shù)代碼不是必須的,僅為了防止以后忘記如何設(shè)計(jì)報(bào)表
  15.     Dim st1 As String
  16.     Set MyRpt = rpt
  17.    
  18.     Set TxtGrpRows = GrpRows
  19.     With TxtGrpRows
  20.         If .Section <> acGroupLevel1Header Then
  21.             st1 = "作為第二個(gè)參數(shù)的文本框必須在分組頁(yè)眉節(jié)上!"
  22.         ElseIf .ControlSource <> "=Count(*)" Then
  23.             st1 = "作為第二個(gè)參數(shù)的文本框的ControlSource屬性必須是""=Count(*)""!"
  24.         ElseIf .RunningSum <> 0 Then
  25.             st1 = "作為第二個(gè)參數(shù)的文本框的RunningSum屬性必須是0!"
  26.         End If
  27.     End With
  28.     If Len(st1) > 0 Then
  29.         MsgBox st1, vbExclamation, "參數(shù)錯(cuò)誤"
  30.         Exit Sub
  31.     End If
  32.    
  33.     Set txtRunSum = RunSum
  34.     With txtRunSum
  35.         If .Section <> acDetail Then
  36.              st1 = "作為第三個(gè)參數(shù)的文本框必須在報(bào)表主體節(jié)上!"
  37.         ElseIf .ControlSource <> "=1" Then
  38.             st1 = "作為第三個(gè)參數(shù)的文本框的ControlSource屬性必須是""=1""!"
  39.         ElseIf .RunningSum <> 1 Then
  40.             st1 = "作為第三個(gè)參數(shù)的文本框的RunningSum屬性必須是1!"
  41.         End If
  42.     End With
  43.     If Len(st1) > 0 Then
  44.         MsgBox st1, vbExclamation, "參數(shù)錯(cuò)誤"
  45.         Exit Sub
  46.     End If
  47.    
  48.     If Not (ShowPage Is Nothing) Then Set lblShowPage = ShowPage
  49.    
  50. End Sub
  51. Public Sub FormatGroupLevel1Header()
  52.     If txtRunSum = 1 Then blFistPage = True           ' 為頁(yè)面頁(yè)腳Format事件作標(biāo)記
  53. End Sub
  54. Public Sub FormatPageFooter()
  55.     Dim inGrpPage As Integer           ' 組頁(yè)碼
  56.     Dim inGrpPages As Integer          ' 組頁(yè)數(shù)
  57.     Dim inLastRows As Integer          ' 截止當(dāng)前頁(yè),所在組的所有行數(shù)
  58.     inLastRows = txtRunSum                                       ' 從文本框獲得截止行數(shù)
  59.     If inLastRows = 0 Then inLastRows = TxtGrpRows
  60.    
  61.     If MyRpt.Page = 1 Then
  62.     '在第1頁(yè)初始變量
  63.         If MyRpt.Pages > 0 And MyRpt.Pages = inRptPage Then
  64.         ' 這里已經(jīng)是第2輪格式化第1頁(yè),報(bào)表加載時(shí)進(jìn)行兩輪格式化,第一輪Pages=0
  65.         Else
  66.             inMaxRows = 0
  67.         End If
  68.         inRptPage = 0
  69.         blPrint = False
  70.     End If
  71.    
  72.     If Not blPrint Then
  73.     '僅在第1輪格式化中,獲取每組第一頁(yè)的行數(shù)
  74.         If blFistPage Then
  75.         '每組第一頁(yè)的行數(shù)即是本組任一頁(yè)的最大行數(shù)
  76.             If inMaxRows < inLastRows Then inMaxRows = inLastRows
  77.             blFistPage = False
  78.         End If
  79.         inRptPage = inRptPage + 1
  80.     End If
  81.    
  82.     If MyRpt.Pages > 0 Then
  83.         inGrpPages = Int(TxtGrpRows / inMaxRows + 0.9999)         ' 組的總行數(shù)除以1頁(yè)的行數(shù),得到組的頁(yè)數(shù)
  84.         inGrpPage = Int(inLastRows / inMaxRows + 0.9999)          ' 截止當(dāng)前頁(yè)的累計(jì)行數(shù)除以1頁(yè)的行數(shù),得到當(dāng)前頁(yè)的頁(yè)碼
  85.         If Not (lblShowPage Is Nothing) Then
  86.             lblShowPage.Caption = inGrpPage & " / " & inGrpPages
  87.         End If
  88.         RaiseEvent Current(inGrpPage, inGrpPages)
  89.     End If
  90. End Sub
  91. Public Sub PrintPageFooter()
  92.     blPrint = True
  93. End Sub

復(fù)制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享分享 分享淘帖 訂閱訂閱

點(diǎn)擊這里給我發(fā)消息

2#
 樓主| 發(fā)表于 2009-5-30 15:31:43 | 只看該作者
本帖最后由 t小寶 于 2009-5-30 15:39 編輯

'分組報(bào)表顯示分組頁(yè)碼和頁(yè)數(shù)(方法二)
'
'功    能:在有分組的報(bào)表的每一頁(yè)上顯示組頁(yè)碼和組頁(yè)數(shù),在預(yù)
'         覽時(shí)改變頁(yè)面設(shè)置后仍能正確顯示。
'作    者:t小雨(
[email=tcl013@126.com)(t]tcl013@126.com)(t[/email]小寶)
'版    本:1.1
'創(chuàng)建日期:2008-05-??
'整理日期:2009-05-30
'補(bǔ)充說(shuō)明:這個(gè)代碼是一年前做的,由于實(shí)現(xiàn)原理和過(guò)程相當(dāng)復(fù)雜,
'         當(dāng)時(shí)沒(méi)有添加注釋?zhuān)淹貌畈欢,加上表達(dá)能力有限,
'         現(xiàn)在勉強(qiáng)添加了不完全的注釋?zhuān)芤勒照f(shuō)明會(huì)用就行。
'         直接把代碼放到報(bào)表中也是可以。
'         做成類(lèi)模塊只是為了好保存,以后調(diào)用方便,但由于在
'         類(lèi)模塊中不能使用報(bào)表的節(jié)的事件,調(diào)用起來(lái)還是有些
'         麻煩,不過(guò)總要比直接把代碼放在報(bào)表簡(jiǎn)單一點(diǎn)。
'
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

'實(shí)現(xiàn)原理:
' 報(bào)表加載后:會(huì)發(fā)生兩輪從第1頁(yè)到最后1頁(yè)每頁(yè)的格式化事件,每輪結(jié)束后發(fā)生一次打印事件,
' 在第一輪格式化事件中報(bào)表的Pages屬性始終為0。最后還會(huì)移到第一頁(yè)。
' 重設(shè)紙張邊距、方向或大小等后也發(fā)生類(lèi)似上述過(guò)程,情況相對(duì)復(fù)雜一點(diǎn),就不細(xì)說(shuō)了。
' 在這些事件中把頁(yè)碼信息保存到數(shù)組中,數(shù)組元素和報(bào)表頁(yè)數(shù)一樣,每個(gè)元素代表一頁(yè)的信息。
' 移動(dòng)頁(yè)后:也會(huì)發(fā)生一次格式化事件,在這些事件中把數(shù)組中頁(yè)碼的信息顯示出來(lái)。
' 上面所說(shuō)的事件都是頁(yè)面頁(yè)腳的事件。

'報(bào)表設(shè)計(jì)要求:
' 很簡(jiǎn)單,有一個(gè)分組字段和頁(yè)面頁(yè)腳即可

'調(diào)用方法有2種:
' 第1種:
' 1、在報(bào)表用New關(guān)鍵字聲明一個(gè) CreateGroupPage2 類(lèi)的新實(shí)例
' 2、在報(bào)表的打開(kāi)事件執(zhí)行實(shí)例的 Init 方法,傳入報(bào)表、分組字段和用于顯示分組頁(yè)碼的標(biāo)簽
' 3、在頁(yè)面頁(yè)腳的 Format (格式化)事件執(zhí)行實(shí)例的 FormatPageFooter 方法
' 4、在頁(yè)面頁(yè)腳的 Print (打印)事件執(zhí)行實(shí)例的 PrintPageFooter 方法
' 這種方法在顯示分組頁(yè)碼的標(biāo)簽上顯示效果如 分組字段值: 1 / 2
' 在報(bào)表中的代碼類(lèi)似下面:

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'  Dim newGroupPage As New CreateGroupPage2
'
'  Private Sub Report_Open(Cancel As Integer)
'      newGroupPage.Init Me, Me.類(lèi)別ID, Me.LplGrpPages
'  End Sub
'
'  Private Sub 頁(yè)面頁(yè)腳_Format(Cancel As Integer, FormatCount As Integer)
'      newGroupPage.FormatPageFooter
'  End Sub
'
'  Private Sub 頁(yè)面頁(yè)腳_Print(Cancel As Integer, PrintCount As Integer)
'      newGroupPage.PrintPageFooter
'  End Sub
'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

' 第2種:
' 1、在報(bào)表用 WithEvents 關(guān)鍵字聲明一個(gè) CreateGroupPage2 類(lèi)的變量
' 2、在報(bào)表的打開(kāi)事件用 Set New 語(yǔ)句創(chuàng)建新實(shí)例
' 3、在報(bào)表的打開(kāi)事件執(zhí)行實(shí)例的 Init 方法,傳入報(bào)表、分組字段,不須傳入用于顯示分組頁(yè)碼的標(biāo)簽
' 4、在頁(yè)面頁(yè)腳的 Format(格式化) 事件執(zhí)行實(shí)例的 FormatPageFooter 方法
' 5、在頁(yè)面頁(yè)腳的 Print(打印) 事件執(zhí)行實(shí)例的 PrintPageFooter 方法
' 6、在類(lèi)的 Current 事件過(guò)程將事件參數(shù)返回的分組頁(yè)碼和頁(yè)數(shù)賦給用于顯示的標(biāo)簽
' 在報(bào)表中的代碼類(lèi)似下面:

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'  Dim WithEvents newGroupPage As CreateGroupPage2
'
'  Private Sub Report_Open(Cancel As Integer)
'      Set newGroupPage = New CreateGroupPage2
'      newGroupPage.Init Me, Me.類(lèi)別ID, Me.LplGrpPages
'  End Sub
'
'  Private Sub 頁(yè)面頁(yè)腳_Format(Cancel As Integer, FormatCount As Integer)
'      newGroupPage.FormatPageFooter
'  End Sub
'
'  Private Sub 頁(yè)面頁(yè)腳_Print(Cancel As Integer, PrintCount As Integer)
'      newGroupPage.PrintPageFooter
'  End Sub
'
'  Private Sub newGroupPage_Current(GrpPage As Integer, GrpPages As Integer)
'      Me.LplGrpPages.Caption = Me.類(lèi)別名稱(chēng) & " 共 " & GrpPages & " 頁(yè),第 " & GrpPage & " 頁(yè)"
'  End Sub
'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 這種方法在顯示分組頁(yè)碼的標(biāo)簽上顯示效果是自定義的


類(lèi)模塊:
  1. Option Compare Database
  2. Option Explicit
  3. Public Event Current(GrpPage As Integer, GrpPages As Integer)
  4. '在此自定義事件中可以獲取分組頁(yè)碼信息,以便自定義顯示頁(yè)碼格式
  5. Dim MyRpt As Report
  6. Dim ctrGroup As Control
  7. Dim lblShowPage As Label
  8. Dim blPrint As Boolean            ' 是否已經(jīng)發(fā)生頁(yè)面頁(yè)腳的Print事件,為避免頁(yè)面頁(yè)腳的Format事件中的代碼重復(fù)運(yùn)行
  9. Dim stGroupText As String         ' 分組字段值
  10. Dim inRptPage As Integer          ' 報(bào)表頁(yè)號(hào)
  11. Dim inGrpPage As Integer          ' 組頁(yè)號(hào)
  12. Dim ainGrpPage() As Integer       ' 保存組頁(yè)號(hào)的數(shù)組,用于顯示
  13. Dim ainGrpPages() As Integer      ' 保存每個(gè)組的總頁(yè)數(shù)的數(shù)組,用于顯示
  14. Dim ainGrpPageTmp() As Integer    ' 保存組頁(yè)號(hào)的數(shù)組,臨時(shí)
  15. Dim ainGrpPagesTmp() As Integer   ' 保存每個(gè)組的總頁(yè)數(shù)的數(shù)組,臨時(shí)

  16. Public Sub Init(rpt As Report, Group As Control, Optional ShowPage As Label)
  17. 'rpt      :報(bào)表本身,必須
  18. 'Group    :用于分組的字段,必須
  19. 'ShowPage :用于顯示分組頁(yè)碼的標(biāo)簽,可選
  20.     Set MyRpt = rpt
  21.     Set ctrGroup = Group
  22.     If Not (ShowPage Is Nothing) Then Set lblShowPage = ShowPage
  23. End Sub

  24. Public Sub FormatPageFooter()
  25. Dim inShowGrpPage As Integer           ' 顯示的組頁(yè)碼
  26. Dim inShowGrpPages As Integer          ' 顯示的組頁(yè)數(shù)
  27. Dim i As Integer, j As Integer
  28. If MyRpt.Page = 1 Then
  29. ' 在第1頁(yè)初始變量
  30.     If inRptPage > 0 And inRptPage = MyRpt.Pages Then
  31.     ' 報(bào)表加載后第一輪格式化完畢發(fā)生
  32.         For j = inRptPage - inGrpPage + 1 To inRptPage   ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  33.             ainGrpPagesTmp(j) = inGrpPage                '
  34.         Next                                             '
  35.         ReDim ainGrpPage(1 To inRptPage)                 ' 這一段代碼與后面一段代碼一樣,因?yàn)楹竺鏌o(wú)法判斷加載完成
  36.         ReDim ainGrpPages(1 To inRptPage)                '
  37.         For i = 1 To inRptPage                           '
  38.             ainGrpPage(i) = ainGrpPageTmp(i)             '
  39.             ainGrpPages(i) = ainGrpPagesTmp(i)           '
  40.         Next                                             '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  41.     End If
  42.    
  43.     inRptPage = 0
  44.     inGrpPage = 0
  45.     stGroupText = ""
  46.     blPrint = False
  47. End If
  48. If Not blPrint Then
  49. '僅在第一輪格式化中獲取頁(yè)位置,保存到臨時(shí)數(shù)組
  50.     inRptPage = inRptPage + 1
  51.     ReDim Preserve ainGrpPageTmp(1 To inRptPage)
  52.     ReDim Preserve ainGrpPagesTmp(1 To inRptPage)
  53.    
  54.     If stGroupText = ctrGroup Then                      ' 當(dāng)前頁(yè)與上一頁(yè)在同一組
  55.         inGrpPage = inGrpPage + 1                       ' 累計(jì)本組頁(yè)數(shù),也即獲得當(dāng)前頁(yè)在當(dāng)前組中的頁(yè)碼
  56.     Else                                                ' 當(dāng)前頁(yè)與上一頁(yè)不在同一組,換組
  57.         For j = inRptPage - inGrpPage To inRptPage - 1  ' 循環(huán)上一組的每一頁(yè)
  58.             ainGrpPagesTmp(j) = inGrpPage               ' 每個(gè)元素都儲(chǔ)存總頁(yè)數(shù),頁(yè)在組中的最大序號(hào)即總頁(yè)數(shù)
  59.         Next
  60.         inGrpPage = 1                                   ' 重新開(kāi)始累計(jì)本組頁(yè)數(shù)
  61.         stGroupText = ctrGroup
  62.     End If
  63.     ainGrpPageTmp(inRptPage) = inGrpPage                ' 每個(gè)元素都儲(chǔ)存頁(yè)在組中的頁(yè)碼
  64. End If
  65. If MyRpt.Page = MyRpt.Pages Then
  66. '報(bào)表已打開(kāi)后重設(shè)紙張邊距大小方向等會(huì)發(fā)生
  67.     If inRptPage = MyRpt.Pages Then
  68.     '僅在最后一頁(yè)把臨時(shí)數(shù)組中的頁(yè)碼信息更新到用于顯示頁(yè)碼的數(shù)組
  69.         For j = inRptPage - inGrpPage + 1 To inRptPage
  70.             ainGrpPagesTmp(j) = inGrpPage               ' 這個(gè)循環(huán)代碼與上面有重復(fù),因?yàn)樯厦鏌o(wú)法判斷最后一頁(yè)
  71.         Next
  72.         
  73.         ReDim ainGrpPage(1 To inRptPage)                ' 數(shù)組大小為報(bào)表頁(yè)數(shù)
  74.         ReDim ainGrpPages(1 To inRptPage)
  75.         For i = 1 To inRptPage
  76.             ainGrpPage(i) = ainGrpPageTmp(i)
  77.             ainGrpPages(i) = ainGrpPagesTmp(i)
  78.         Next
  79.     End If
  80. End If
  81. On Error Resume Next
  82. If MyRpt.Pages > 0 Then
  83.     inShowGrpPages = ainGrpPages(MyRpt.Page)   '
  84.     inShowGrpPage = ainGrpPage(MyRpt.Page)    '
  85.     If Not (lblShowPage Is Nothing) Then lblShowPage.Caption = _
  86.         ctrGroup & ": " & inShowGrpPage & " / " & inShowGrpPages
  87.     RaiseEvent Current(inShowGrpPage, inShowGrpPages)
  88. End If
  89. End Sub
  90. Public Sub PrintPageFooter()
  91. ' 區(qū)分兩輪格式化
  92.     blPrint = True
  93. End Sub
復(fù)制代碼
示例:
游客,如果您要查看本帖隱藏內(nèi)容請(qǐng)回復(fù)

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒(méi)有帳號(hào)?注冊(cè)

x

評(píng)分

參與人數(shù) 1經(jīng)驗(yàn) +10 收起 理由
Grant + 10 精彩奉獻(xiàn)

查看全部評(píng)分

3#
發(fā)表于 2009-5-30 16:41:02 | 只看該作者
小寶,辛苦你了,謝謝!
4#
發(fā)表于 2009-5-31 09:48:45 | 只看該作者
經(jīng)驗(yàn)之談啊
先收藏!
5#
發(fā)表于 2009-5-31 10:19:19 | 只看該作者
謝謝分享
6#
發(fā)表于 2009-5-31 10:29:41 | 只看該作者
謝謝分享
樓主越來(lái)越厲害了
7#
發(fā)表于 2009-5-31 12:31:07 | 只看該作者
小寶,辛苦你了,謝謝!
8#
發(fā)表于 2009-5-31 13:01:23 | 只看該作者
look
9#
發(fā)表于 2009-5-31 13:15:50 | 只看該作者
小寶把這個(gè)漏洞給填補(bǔ)了,Good,收藏了謝謝
10#
發(fā)表于 2009-5-31 15:10:52 | 只看該作者
小寶,辛苦你了,謝謝!
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2024-10-23 10:23 , Processed in 0.091954 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表