Page 1 of 1

wdDoc.PrintPreview

Posted: Mon Oct 07, 2013 7:15 am
by Bafnet
สวัสดีครับอาจารย์
มีเรื่องรบกวนหน่อยนะครับ
ผมเขียนคำสั่งพิมพ์ Word ดังนี้ครับ

Code: Select all

Private Sub CommandButton2_Click()
Dim wx As Variant
Dim wdApp As Word.Application
Dim wdDoc As Word.Document
Dim r As Integer
On Error Resume Next

If ComboBox1.Value = "statement 301" Then 
Set wdApp = New Word.Application
wdApp.Visible = True
Set wdDoc = wdApp.Documents.Open("C:\CIM360\Doc\D1\301_02_01.doc")
wdApp.PrintOut Filename:="", Range:=wdPrintRangeOfPages, Copies:=1, Pages:="1-3"
wdApp.Quit True
Set wdApp = Nothing
End If
End Sub
ซึ่งไม่มีปัญหาอะไรครับ แต่ที่อยากรบกวนคือผมอยากให้เปลี่ยนจากพิมพ์ เป็นการ PrintPreview
ได้ทดลองเขียนแบบนี้

Code: Select all

Private Sub CommandButton2_Click()
Dim wx As Variant
Dim wdApp As Word.Application
Dim wdDoc As Word.Document
Dim r As Integer
On Error Resume Next

If ComboBox1.Value = "statement" Then 
Set wdApp = New Word.Application
wdApp.Visible = True
Set wdDoc = wdApp.Documents.Open("C:\CIM360\Doc\D1\301_02_01.doc")
frmdocument.Hide 
wdDoc.PrintPreview
wdApp.Quit True
Set wdApp = Nothing
frmdocument.Show
End If
End Sub
ปรากฏว่าดูจากการทำงาน มันทำงานครับ แต่เปิดแล้วก็ปิดเลย ไม่ Active ไปที่หน้า PrintPreview
เลยทดสอบโดยเอาคำสั่ง
wdApp.Quit True
Set wdApp = Nothing
ออกไป
ปรากฏว่า มันทำงานครับแต่ไม่ Active ไปที่หน้า PrintPreview ต้องเอาเมาส์ไปคลิ๊กที่ Word ที่เมนูบาร์เอง
แต่พอปิดหน้า PrintPreview ปรากฏว่า Word ที่สั่งเปิดก็ยังอยู่ ต้องปิดเองอีกครับ

รบกวนแนะนำหน่อยครับว่าจะแก้ไขอย่างไร ให้ Word ที่เราสั่งเปิด window Active ไปหน้า PrintPreview เพื่อให้ผู้ใช้งานตรวจดูเอกสารก่อนว่าเอกสารที่เลือกถูกต้องรึเปล่า
พอปิดหน้า PrintPreview ก็จะปิด word ที่เปิด พร้อมกลับสู่หน้า USER FORM(frmdocument.Show) ของโปรแกรมเราต่อครับ
:roll:
ขอบคุณมากครับ

Re: wdDoc.PrintPreview

Posted: Mon Oct 07, 2013 10:11 am
by snasui
:D ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Private Sub CommandButton2_Click()
    Dim wx As Variant
    Dim wdApp As Word.Application
    Dim wdDoc As Word.Document
    Dim r As Integer
    On Error Resume Next
    
    If ComboBox1.Value = "statement" Then
        Set wdApp = New Word.Application
        wdApp.Visible = True
        wdApp.Activate
        Set wdDoc = wdApp.Documents.Open("C:\CIM360\Doc\D1\301_02_01.doc")
        frmdocument.Hide
        wdDoc.PrintPreview
        Do While wdApp.PrintPreview = True
        Loop
        wdApp.Quit True
        Set wdApp = Nothing
        frmdocument.Show
    End If
End Sub

Re: wdDoc.PrintPreview

Posted: Mon Oct 07, 2013 6:10 pm
by Bafnet
ขอบคุณมากๆครับอาจารย์
ต้องขอโทษด้วยครับ ที่เข้ามาดูคำตอบช้า ผมพึ่งกลับจากทำงาน
ขอบคุณมากจริงๆครับ :cp:
ขอเรียนถามอาจารย์หน่อยนะครับ เพราะเป็นสิ่งที่ผมคาดไม่ถึง

Do While wdApp.PrintPreview = True
Loop

มันเป็นคำสั่งให้ทำซ้ำๆ Loop จนกระทั่ง...

อธิบายให้ผมสักนิดนะครับ เพื่อจะได้ความรู้เพิ่มขึ้น
ว่าคำสั่งดังกล่าวมันเกี่ยวข้องกับการ Print Preview กันได้อย่างไร

ปกติที่ผมใช้
r=2
Do Until Sheet11.Cell....
Do While Sheet11.Cell....

แต่กรณีนี้นึกไม่ถึงว่าไฉนเลยคำเฉลยจึงไปเกี่ยวข้องกับการ Loop
:roll:

Re: wdDoc.PrintPreview

Posted: Mon Oct 07, 2013 6:21 pm
by snasui
:D เป็นการ Loop ให้เช็คว่ามีการ Print Preview อยู่หรือไม่ ถ้าใช่ก็ให้ Loop เช็คอยู่เช่นนั้นจนกว่าจะมีการปิด Print Preview ไปจึงจะทำงานตาม Code อื่น ๆ ต่อไปครับ

Re: wdDoc.PrintPreview

Posted: Mon Oct 07, 2013 8:15 pm
by Bafnet
ขอบคุณมากๆครับ
ทำให้เข้าใจขึ้นอีกระดับหนึ่ง
ว่าคำสั่งชุดหนึ่งนั้น จะมองการนำไปใช้งานเพียงมิติเดียวไม่ได้
มันคงคล้ายกับตัวต่อเลโก้ ชิ้นหนึ่งๆสามารถ Apply ได้ในหลายรูปแบบ
ขอบคุรมากๆครับ ทุกครั้งที่มีปัญหา ที่นี่มีคำตอบให้เสมอ
ปัญหามา ปัญญาเกิด ขอบคุณครับ
:lol: