ใน Report detail มีวิธีผสานเซลล์ได้ใหมค่ะ



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

23 ก.ย. 63 , 16:49:19
อ่าน 170 ครั้ง

MAKI



อยากให้ช่อง [เหตุผลที่ซื้อ] แสดงแค่อันเดียวค่ะ

 

25 ก.ย. 63 , 23:44:47
ตอบกลับ #1

สันติสุข

: ใน Report detail มีวิธีผสานเซลล์ได้ใหมค่ะ
« ตอบกลับ #1 เมื่อ: 25 ก.ย. 63 , 23:44:47 »
ผมไม่รู้ว่า กรอบแรกและกรอบที่สองจะเป็นข้อความเดียวกันหรือเปล่านะครับ เอาว่าถ้ามันแตกต่างกัน ผลลัพธ์ที่ต้องการจะหมายถึงอย่างนี้หรือเปล่าครับ
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: MAKI

26 ก.ย. 63 , 11:14:19
ตอบกลับ #2
: ใน Report detail มีวิธีผสานเซลล์ได้ใหมค่ะ
« ตอบกลับ #2 เมื่อ: 26 ก.ย. 63 , 11:14:19 »
รอด้วยคนครับ อยากรู้พอดี

 
โพสต์นี้ได้รับคำขอบคุณจาก: MAKI

26 ก.ย. 63 , 20:55:09
ตอบกลับ #3

สันติสุข

: ใน Report detail มีวิธีผสานเซลล์ได้ใหมค่ะ
« ตอบกลับ #3 เมื่อ: 26 ก.ย. 63 , 20:55:09 »
ถ้าต้องการจัดข้อความให้อยู่กึ่งกลางเซลล์ที่รวม ทั้งแนวตั้งและนอนด้วย เท่าที่คิดออกคือไปสั่งออกรายงานใน Excel แต่เขียนโค้ดเยอะทีเดียว ถ้าจะทำใน Access วิธีเท่าที่คิดออก เป็นแค่การหลอกตาเท่านั้น ข้อความในบรรทัดที่ซ้ำจะหายไปตามต้องการ แต่ข้อความจะยังคงอยู่ที่บรรทัดแรกเสมอ ไม่สามารถไปกึ่งกลางเซลล์ที่รวมได้

วิธีการคือ
- การซ่อนข้อความที่ซ้ำ ให้กำหนด Hide Duplicate property ของเท็กซ์บ็อกซ์ที่แสดง "เหตุผลที่ซื้อ" (สมมุติชื่อ txtReason) เป็น Yes แต่ข้อความนี้จะพิมพ์เสมอเมื่อเป็นบรรทัดแรกของหน้า
- การพิมพ์ขอบของเซลล์ที่รวม เราจะสร้างคอนโทรลของเส้น แทนการใช้กรอบของเท็กซ์บ็อกซ์ ดังนั้น Border Style ของ txtReason กำหนดให้เป็น Transparent ไป ให้สร้างเส้นแนวนอน lineUpper อยู่ที่ขอบบนของ txtReason และให้มีความยาวเท่ากันพอดี  เส้น lineLower วางอยู่ขอบล่าง  เส้น lineRight เป็นแนวตั้งวางอยู่ขอบขวา ส่วนขอบซ้ายคงไม่จำเป็นเพราะเท็กซ์บ็อกซ์ทางซ้ายจะพิมพ์เส้นนั้นอยู่แล้ว   เส้นทั้ง 3 ต้องจัดเลเยอร์ให้อยู่เหนือ txtReason ด้วยนะครับ
- lineUpper จะพิมพ์เมื่อ txtReason พิมพ์ (ซึ่งก็คือบรรทัดแรกของกลุ่มข้อความที่ซ้ำ) โดยเช็คได้จาก .IsVisible property
- lineLower จะพิมพ์เมื่อเป็นบรรทัดสุดท้ายในหน้า ซึ่งต้องใช้เทคนิคให้ระบบรันรายงาน 2 หน (ไม่ใช่เราสั่งพิมพ์ 2 หน) หนแรกเช็คได้จากค่า .Pages property ของ Report object จะเป็นศูนย์ เราใช้หนแรกเพื่อบันทึกว่าบรรทัดไหนเป็นบรรทัดสุดท้ายในแต่ละหน้า โดยบันทึกลงในตัวแปรอะเรย์ A  ค่าของ A(เลขที่บรรทัด) จะเป็น TRUE   ส่วนหนที่สองเพื่อตรวจกับ A ว่า ถ้าบรรทัดที่พิมพ์คือบรรทัดสุดท้ายในหน้านั้น ก็ให้พิมพ์ lineLower
- การบังคับให้ระบบรันรายงาน 2 หน ทำด้วยการสร้างเท็กซ์บ็อกซ์ที่มี Control Source เป็น =[Pages]  เอาไว้ใน Page Header section แต่เราไม่ได้ต้องการจะเห็นมัน เราก็กำหนด Visible property ของเท็กซ์บ็อกซ์ให้เป็น No 
- การที่จะรู้ว่าบรรทัดที่พิมพ์เป็นบรรทัดที่เท่าไหร่ ก็ให้สร้างเท็กซ์บ็อกซ์ txtSeq ที่มี Constrol Source เป็น =1, Running Sum property เป็น Over All และ Visible property เป็น No

อธิบายยืดยาว แต่โค้ดมีสั้นๆแค่
โค๊ด: [Select]
Option Compare Database
Option Explicit

Dim A() As Boolean

Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)
    Me.lineUpper.Visible = Me.txtReason.IsVisible
    If Me.Pages <> 0 Then Me.lineLower.Visible = A(Me.txtSeq)
End Sub

Private Sub PageFooterSection_Format(Cancel As Integer, FormatCount As Integer)
    If Me.Pages = 0 Then
        ReDim Preserve A(Me.txtSeq)
        A(Me.txtSeq) = True
    End If
End Sub
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: sjs, SakDa, PNR, MAKI, ชุติพนธ์ มหาทรัพย์

28 ก.ย. 63 , 11:01:25
ตอบกลับ #4

MAKI

: ใน Report detail มีวิธีผสานเซลล์ได้ใหมค่ะ
« ตอบกลับ #4 เมื่อ: 28 ก.ย. 63 , 11:01:25 »
ขอบคุณมากเรยค่ะ :yuush: :yuush: :yuush:

 


บอร์ดเรียนรู้ Access สำหรับคนไทย