เห็นใน report แต่ไม่ต้องการให้ออกมาตอน print
กระทู้เก่าบอร์ด อ.Yeadram

 4,358   16
URL.หัวข้อ / URL
เห็นใน report แต่ไม่ต้องการให้ออกมาตอน print

คือผมทำให้เลขลำดับ กับเลขหน้า แสดงให้เห็นชัดๆ ตัวใหญ่ ๆ ในรายงาน

แต่ไม่ต้องการให้มัน ติดออกมาตอน print สามารถทำได้ไม๊ครับ

รบกวน ผู้รู้แนะนำหน่อยครับ ผมใช้ acces97 ครับผม

16 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R03043
ไม่แน่ใจว่าโค้ดนี้ใช้ได้กับ Access97 หรือไม่ เป็นฟังก์ชั่นที่ตรวจว่ากำลังเปิดหน้า Report ในโหมด Print หรือ Preview

ไปดูที่หัวข้อ How Can I Tell If My Report Was Opened In Preview or Printed? ตามลิงค์นี้ครับ http://www.groupacg.com/ARptTip.htm
2 @R03052
โหมด Print หรือ Preview นี่สามารถตั้งค่าการแสดงผลให้ต่างกันได้หรือครับ
ผมเข้าใจว่า หน้า report ก็คือ prin preview ไม่ทราบว่ามี 2 โหมด
ไม่เข้าใจเรื่อง 2 โหมดนี้ จริงๆ ครับ
รบกวนผู้รู้ช่วยอธิบายด้วยครับ
3 @R03053
คุณก็ใช้ ฟังก์ชั่นที่อยู่ในลิงค์ที่ให้ไป เอาไปเช็คใน event procedure ที่เหมาะสม ของ Report เช่น OnFormat หรือ OnPrint event แล้วคุณก็ไปกำหนดเองว่าจะให้ textbox หรือคอลโทรลอื่นๆ มันแสดง (.Visible = True) หรือไม่เสดง (.Visible = False) ก็เท่านั้นแหล่ะครับ

จะเรียก 2 โหมดก็ได้ เวลาสั่งพิมพ์เรายังเลือกจากทูลส์บาร์ได้เลยว่าจะ print หรือ preview ดังนั้นใน VBA ก็สามารถระบุได้ว่าจะพิมพ์รายงานเลย หรือจะให้แสดง preview ก่อน โดยใช้คำสั่ง DoCmd.OpenReport "ชื่อรายงาน", acViewNormal (เพื่อพิมพ์เลย) หรือ acViewPreview (เพื่อ preview)
4 @R03068
แล้ววิธีเช็คคือเอา   =[ChkPreview]   ใส่ใน   OnFormat    ของหน้าออกแบบ report เหรอครับ

ทดลองทำหลายแบบแล้วก็ไม่สำเร็จน่ะครับ

รบกวนช่วยบอกวิธี แบบละเอียดหน่อยได้ไม๊ครับ

ไม่ทราบจริง ๆ ครับ เพิ่งเริ่มศึกษาน่ะครับ
5 @R03069
ในช่องของ OnFormat ให้เลือกเป็น [Event Procedure] แล้วก็กดปุ่ม ... ที่อยู่หลังคำนี้ ก็จะเปิด VB Editor ขึ้นมาพร้อมทั้งมีขื่อ Procedure ให้เราแล้ว เราก็ใส่โค้ดเข้าไปเลย

Private Sub ...._Format( .... )

   if ChkPreview(me.name) then
      ใส่คำสั่งว่าจะแสดงหรือไม่แสดงอะไรเมื่อเป็นโหมด Preview
   Else
      ใส่คำสั่งว่าจะแสดงหรือไม่แสดงอะไรเมื่อเป็นโหมด Print
   End If

End Sub

ส่วนโค้ดที่อยู่ในลิงค์ที่ให้ไป ก็ก๊อปแล้วไปแปะในส่วนของ Module ที่สร้างใหม่ครับ
6 @R03086
Private Sub GroupHeader0_Format(Cancel As Integer, FormatCount As Integer)
   
   If ChkPreview(Me.Name) Then
      Report!MAIN!ลำดับ.Visible = True
   Else
      Report!MAIN!ลำดับ.Visible = False
   End If

End Sub

ไม่ทราบว่าแบบนี้ถูกหรือเปล่าครับ
คือผมไม่มีความรู้เกี่ยวกับ VB น่ะครับ
ลองหาความรู้คร่าว ๆ ดู
ไม่ทราบว่า อ้างอิงไปถึง textbox ถุกหรือเปล่า
เท่าที่ทดลองดู
มันไปติดตรง



compile error
Invalid outside procedure
7 @R03087
ภาพไม่เห็นนะครับ แต่ควรเขียนว่า me.ลำดับ.visible มากกว่าครับ
8 @R03088
ผมแก้เป็น

Private Sub GroupHeader0_Format(Cancel As Integer, FormatCount As Integer)
      If ChkPreview(Me.Name) Then
      me.ลำดับ.Visible = True
   Else
      me.ลำดับ.Visible = False
   End If
End Sub

แต่มันไปติดหน้า code ที่ผมไป copy มา
มันขึ้นหน้าต่างเตือนขึ้นมาว่า

compile error
Invalid outside procedure

รบกวนด้วยครับ
9 @R03097
ผมยังไม่เคยใช้สักที แต่พอไปอ่านรายละเอียด สงสัยจะไม่ใช่อย่างที่คิดไว้แล้วครับ ผมลองใช้ดู ก็ไม่ได้อย่างที่คิดไว้เหมือนกัน (แต่ไม่มี error เกิดขึ้น) ก็เลยไปคิดวิธีโดยเช็คจาก command bar button Check Preview แทน ก็คือสันนิษฐานว่า ถ้าเป็นการพิมพ์จริงๆเมื่อไหร่แล้ว เมนูบาร์ > File > Check Preview ควรจะไม่ Enable ให้ใช้งานได้ ซึ่งก็เป็นไปตามนั้นจริงๆ โดยโค้ดที่ตรวจสอบว่าเป็นโหมด Preview หรือไม่เป็นดังนี้

If CommandBars("Menu Bar").Controls("File").Controls("Print Preview").Enabled Then

แต่ว่า Access97 จะใช้ได้หรือไม่ ผมไม่ยืนยันครับ ไม่ใช้มาเป็นสิบปีแล้ว
10 @R03114
ทดลองทำดูแล้ว ไม่ติด   error   อะไรเลย
แต่มันก็ติดออกมาตอน print อยู่ครับ

อธิบายขั้นตอนของผมนะครับ
เผื่อว่า อ.สันติสุข ดูแล้วอาจจะมองออกว่าผมพลาดอะไรตรงไหน

ในหน้า ออกแบบของ report
ในส่วนของ textbox ที่ผมไม่ต้องการให้แสดงตอน print นั้น
ผมเลือกที่ event > onformat > ... > ตัวสร้างรหัส (ของผมเป็นภาษาไทยไม่ทราบในภาษาอังกฤษใช้คำว่าอะไร)
มันก็จะขึ้นหน้าให้เราสร้าง classmodule ผมก็ใส่


Private Sub GroupHeader0_Format(Cancel As Integer, FormatCount As Integer)
     If CommandBars("Menu Bar").Controls("File").Controls("Print Preview").Enabled Then
      me.run.Visible = True
   Else
      me.run.Visible = False
   End If
End Sub


ผมเปลี่ยนชื่อ textbox จาก ลำดับ เป็น run ครับ
หลังจากนั้น ก็ลองทดสอบ ปรากฏว่ามันก็ยังติดออกมาตอน print อยู่ครับ
อ้อ ผมลบ ฟังชั่น ที่ อาจารย์บอกว่า ใช้ไม่ได้ออกแล้วด้วยนะครับ
ไม่ทราบว่าจะเกี่ยวกันหรือเปล่า
11 @R03116
ดูแล้วมันก็ไม่น่าจะผิดนะครับ และถ้ายิ่งไม่มี error ด้วย ก็ยิ่งหาจุดที่ผิดยาก ลองเปลี่ยนเมนูเป็นภาษาอังกฤษได้ไหมครับ ผมไม่แน่ใจว่า ชื่อ "File" , "Print Preview" มันจะอ้างอิงเปลี่ยนไปตามภาษาของเมนูด้วยหรือไม่ หรืออาจเปลี่ยนเป็นคำว่า "ไฟล์" หรืออย่างอื่นใดที่เมนูภาษาไทยใช้    แล้วถ้ามีเครื่องที่ลง Office 2000 เป็นต้นไป ก็ลองเอาโค้ดนี้ไปลองใช้นะครับ ว่าใช้ได้หรือไ่ม่   ถ้าเปลี่ยนได้ ก็ลง Office XP จะดีกว่านะครับ เพราะ 97 เก่ามากแล้ว จะทำอะไรก็หาคนช่วยยากแล้ว

ปล. ฟังก์ชั่นที่ไม่ใช้แล้ว ลบออกไปได้เลย ไม่มีผลใดๆ
12 @R03117
ถ้างั้นผมจะลองเปลียนเป็น office2003 เลยจะดีไม๊ครับ
ผมก็ไม่เคยลองใช้ เคยลองอัพเกรดฐานข้อมูลครั้งนึง
วันที่ format ต่าง ๆ ที่ผมเคยเซ็ตไว้เปลี่ยนไปหมดเลย
จึงไม่ได้เปลียนไปใช้รุ่นที่ใหม่กว่า

เลยอยากขอความเห็นอาจารย์ว่า
เปลียนไปใช้ access2003 เลยจะดีไหมครับ
ถ้าอาจารย์แนะนำว่าดีกว่าผมจะได้มั่นใจว่าฐานข้อมูลผมมันจะดีขึ้น
อาจต้องปรับเปลียนอะไรบ้างก็จะพยามแก้ไขกันไป
จะได้ทดลอง code ที่อาจารย์ให้มาด้วยครับ
หลังจากอัพเกรด อาจจะต้องเข้ามารบกวนอาจารย์ในบอร์ดมากขึ้นครับ
แต่ก็จะพยายาม ศึกษาด้วยตนเองให้มากที่สุด
ตอนนี้ก็ เอาหนังสือ VB มาอ่านอยู่ครับ
เท่าที่อ่านดูแล้ว หึ..หึ..หึ..มึนครับ

13 @R03122
จะ Office XP หรือ Office 2003 ก็ได้ครับ เพียงแต่ติดตั้ง Service Pack ให้ครบก็แล้วกัน .. ว่าแต่ว่า งานของคุณหน่ะ มันงานใช้จริงทุกเมื่อเชื่อวัน หรือมันงานทดลองเรียนรู้เขียนเล่นๆ ถ้าเป็นกรณีแรก ผมไม่อยากให้คุณถอด Office97 แล้วลงใหม่กว่าทับ โดยหวังว่าจะใช้ได้ 100% โดยไม่ต้องแก้ไขอะไรเลย เดี๋ยวงานคุณจะชะงักหรือมีปัญหาได้ ถ้ามีสองระบบไว้ทดลองได้ ก็น่าจะดีครับ งานเก่าก็ทำไป ส่วนระบบใหม่ก็ค่อยๆทดสอบไปจนกว่าจะแน่ใจว่าไม่มีปัญหาแล้ว ค่อยเปลี่ยนเป็นเวอร์ชั่นใหม่ทั้งหมด

อีกอย่างนึงคือ ก๊อปปี้ทั้งไฟล์โปรแกรม (front end) และฐานข้อมูล (back end) เอาไว้ด้วย 1 ชุดนะครับ แล้วอย่า convert ไปเวอร์ชั่นใหม่โดยทับชุดสำรองนี่หล่ะ

แล้วทดลองแก้ไขแล้ว ก็ยังใช้โค้ดนี้บน Access97 ไม่ได้หรือ ?
14 @R03137
เป็นงานใช้ทุกวันครับ แต่ผม copy มาแก้ไข ปรับปรุง น่ะครับ
กะว่าพอขึ้นปีงบประมาณใหม่ ก็จะทำให้มันดีขึ้น

ลองลง office2003 แล้วครับ แต่ของผมเป็นภาษาไทย
หาวิธีปรับ เมนู เป็นภาษาอังกฤษไม่ได้เลย
พอทดลอง code ที่ อ.ให้มามันก็ ขึ้นแถบสีเหลือง ที่

If CommandBars("Menu Bar").Controls("File").Controls("Print Preview").Enabled Then

ตรง code ของ อ.น่ะครับ
ทดลองเปลี่ยนเป็น   "เมนูบาร์" "แฟ้ม" "ตัวอย่างก่อนพิมพ์" ให้ตรงกับเมนูภาษาไทย
ก็ขึ้นแถบ สีเหลือง อยู่ดี

ไม่ทราบว่า อ.พอจะมีวิธีอื่นอีกไหมครับ
15 @R03138
- ลองลงเมนูเป็นภาษาอังกฤษครับ คุณต้องมีแผ่น Office 2003 MUI (Multilingual User Interface) Pack CD สำหรับภาษาอังกฤษเพื่อลงเมนู คำโต้ตอบ และ help file เป็นภาษาอังกฤษ

- ลอง compile ครับ ว่ามี error อะไรหรือไม่ และที่บอกว่า error มันบอก error message ว่าอย่างไร

- คำว่า Menu Bar ลองคงไว้เป็นภาษาอังกฤษครับ นอกนั้นลองเป็นภาษาไทยดู จะได้ไหม
16 @R03142
ได้แล้วครับอาจารย์ เปลี่ยนเป็นแบบที่ อาจารย์บอกจริง ๆ ด้วยครับ
คง Menu Bar ไว้เป็นภาษาอังกฤษ


   If CommandBars("menu bar").Controls("แฟ้ม").Controls("ตัวอย่างก่อนพิมพ์").Enabled Then


รบกวน อาจารย์มาหลาย rep เหลือเกิน
ขอบพระคุณอาจารย์จริงๆ ครับ ที่เข้ามาตอบ มาช่วยเหลือ

ปล.ฐานข้อมูลยังไม่เสร็จ
     คงจะต้องเข้ามารบกวนอีกแน่ๆ ครับ



@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3877s