กระทู้เก่าบอร์ด อ.Yeadram
2,622 7
URL.หัวข้อ /
URL
Report : การตั้งเลขที่หน้าแบบกลุ่ม ?
ถามหน่อยสิครับ ถ้า Report ของเราตั้งเอาไว้ให้เป็นแบบกลุ่ม และก็ตั้งให้มันขึ้นหน้าใหม่ทุกๆกลุ่ม...
คราวนี้ผมอยากแยกเลขหน้าให้มันเป็นกลุ่มด้วยได้ไหมครับเช่น
ข้อมูลของผมมีอยู่ 3 กลุ่ม (A,B,C) โดยแต่ละกลุ่มมีข้อมูล 100,200,300 record ตามลำดับ ใน report ก็จะแสดงเลขหน้าต่อกันไปยาว 1,2,3 ... ไปจนสุด Report แต่สิ่งที่ผมต้องการคือ ให้มันขึ้นเลขหน้าใหม่ทุกครั้งที่เปลี่ยนกลุ่มโดยมีเลขหน้ารวมของแต่ละกลุ่มอยู่ด้วยเช่น
กลุ่ม A
Page 1 of 3
Page 2 of 3
กลุ่ม B
Page 1 of 4
... Page 4 of 4
อะไรประมาณนี้
คราวนี้ผมอยากแยกเลขหน้าให้มันเป็นกลุ่มด้วยได้ไหมครับเช่น
ข้อมูลของผมมีอยู่ 3 กลุ่ม (A,B,C) โดยแต่ละกลุ่มมีข้อมูล 100,200,300 record ตามลำดับ ใน report ก็จะแสดงเลขหน้าต่อกันไปยาว 1,2,3 ... ไปจนสุด Report แต่สิ่งที่ผมต้องการคือ ให้มันขึ้นเลขหน้าใหม่ทุกครั้งที่เปลี่ยนกลุ่มโดยมีเลขหน้ารวมของแต่ละกลุ่มอยู่ด้วยเช่น
กลุ่ม A
Page 1 of 3
Page 2 of 3
กลุ่ม B
Page 1 of 4
... Page 4 of 4
อะไรประมาณนี้
7 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R00780
โค้ดนี้เป็นโค้ดอันดับต้นๆที่ผมนับถือมากๆ เพราะไม่ได้ใช้ API อะไรเลย ใช้เฉพาะคุณสมบัติที่มีมากับ Access อยู่แล้ว แต่สามารถทำในสิ่งที่เหมือนจะทำไม่ได้ใน Report ให้กลายเป็นสิ่งที่เป็นไปได้ ผู้ที่คิดวิธีนี้ได้ซึ่งกระชับมากๆ ไม่ใช่แค่เซียน แต่ต้องเรียกว่าเป็นระดับ "โคตรเซียน" เลยทีเดียว
Printing First and Last Page Numbers for Report Groups
Printing First and Last Page Numbers for Report Groups
3 @R00781
ขอบคุณครับคุณสันติสุข ลองเอาไปใช้ดูแล้ว OK เลย...
เมื่อก่อนผมต้องใช้วิธี การนับ record ซึ่งค่อนข้างยุ่งยาก
เมื่อก่อนผมต้องใช้วิธี การนับ record ซึ่งค่อนข้างยุ่งยาก
4 @R01765
Code นี้นำไปใช้อย่างไรครับ
'************ Code Start *************
' This code was originally written by James H Brooks.
' It is not to be altered or distributed,
' except as part of an application.
' You are free to use it in any application,
' provided the copyright notice is left unchanged.
'
' Code Courtesy of
' James H Brooks
'
Option Compare Database
Option Explicit
Dim GrpArrayPage(), GrpArrayPages()
Dim GrpNameCurrent As Variant, GrpNamePrevious As Variant
Dim GrpPage As Integer, GrpPages As Integer
Private Sub PageFooter_Format(Cancel As Integer, FormatCount As Integer)
Dim i As Integer
If Me.Pages = 0 Then
ReDim Preserve GrpArrayPage(Me.Page + 1)
ReDim Preserve GrpArrayPages(Me.Page + 1)
GrpNameCurrent = Me!Salesperson
If GrpNameCurrent = GrpNamePrevious Then
GrpArrayPage(Me.Page) = GrpArrayPage(Me.Page - 1) + 1
GrpPages = GrpArrayPage(Me.Page)
For i = Me.Page - ((GrpPages) - 1) To Me.Page
GrpArrayPages(i) = GrpPages
Next i
Else
GrpPage = 1
GrpArrayPage(Me.Page) = GrpPage
GrpArrayPages(Me.Page) = GrpPage
End If
Else
Me!ctlGrpPages = "Group Page " & GrpArrayPage(Me.Page) & " of " & GrpArrayPages(Me.Page)
End If
GrpNamePrevious = GrpNameCurrent
End Sub
'************ Code End *************
'************ Code Start *************
' This code was originally written by James H Brooks.
' It is not to be altered or distributed,
' except as part of an application.
' You are free to use it in any application,
' provided the copyright notice is left unchanged.
'
' Code Courtesy of
' James H Brooks
'
Option Compare Database
Option Explicit
Dim GrpArrayPage(), GrpArrayPages()
Dim GrpNameCurrent As Variant, GrpNamePrevious As Variant
Dim GrpPage As Integer, GrpPages As Integer
Private Sub PageFooter_Format(Cancel As Integer, FormatCount As Integer)
Dim i As Integer
If Me.Pages = 0 Then
ReDim Preserve GrpArrayPage(Me.Page + 1)
ReDim Preserve GrpArrayPages(Me.Page + 1)
GrpNameCurrent = Me!Salesperson
If GrpNameCurrent = GrpNamePrevious Then
GrpArrayPage(Me.Page) = GrpArrayPage(Me.Page - 1) + 1
GrpPages = GrpArrayPage(Me.Page)
For i = Me.Page - ((GrpPages) - 1) To Me.Page
GrpArrayPages(i) = GrpPages
Next i
Else
GrpPage = 1
GrpArrayPage(Me.Page) = GrpPage
GrpArrayPages(Me.Page) = GrpPage
End If
Else
Me!ctlGrpPages = "Group Page " & GrpArrayPage(Me.Page) & " of " & GrpArrayPages(Me.Page)
End If
GrpNamePrevious = GrpNameCurrent
End Sub
'************ Code End *************
5 @R01766
ในหน้าเวปที่ให้ลิงค์ไป ก็อธิบายไว้หมดแล้วนี่คับ
6 @R01768
มีตัวอย่างไฟล์ที่ใช้ code นี้ไหมครับ
ผมลองทำแล้ว มันเกิด #Error ครับ
ผมลองทำแล้ว มันเกิด #Error ครับ
7 @R01771
ผมมีแต่ application ที่ทำจริง ให้ไม่ได้ครับ ... คิดว่าคุณคงทำผิดที่จุดใดสักจุด ถ้าได้ ลอง email ไฟล์ของคุณไปไว้ที่ accboard@gmail.com ดูครับ
Time: 0.3089s
ให้แสดงรายงานเฉพาะกลุ่มที่ระบุ ก็จะได้ตามความต้องการ
เพราะไหนๆ เราก็ตั้งใจให้แต่ละกลุ่มอยู่แยกคนละหน้าอยู่แล้ว (คงไม่คิดจะเขียนว่า "หน้าที่ 3/3 ของกลุ่ม A และเป็นหน้าที่ 1/3 ของกลุ่ม B" ในหน้าเดียวกันใช่มั้ยครับ อิอิ)
หากต้องการ สรุปยอดของทุกๆ กลุ่ม ใช้ sub form หรือ sub report ช่วยที่ท้ายรายงาน
- เรียกรายงานได้เร็วขึ้นเพราะโหลดข้อมูลน้อยกว่า (โหลดทีละกลุ่ม)
- ไม่ต้องออกแบบรายงานใหม่ ไม่ต้องเขียนโค้ดเพิ่มเติม ประหยัดทรัพยากรเครื่อง ประหยัดพื้นที่รวมของดาต้าเบส
ตอบไม่ตรงคำถามนัก แต่คิดว่า วิธีนี้ก็น่าจะเอามาพิจารณา ทดแทนกันได้นะครับ