วันพฤหัสบดีที่ 17 เมษายน พ.ศ. 2557

การสั่งพิมพ์ เอกสาร MS Excel จำนวนมากด้วยชุดคำสั่ง Excel VBA -- Auto print

ทำโปรแกรม Auto Print ง่ายๆใน MS Excel ด้วย VBA



ถ้าคุณเป็นคนหนึ่งที่ต้องทำงานเกี่ยวกับเอกสารโดยใช้ MS Excel เป็นหลัก และต้องมีการพิมพ์เอกสารจำนวนมหาศาลไม่รู้ตั้งกี่หน้าที่อยู่ในหนึ่งไฟล์ แล้วยิ่งคุณมีจำนวณไฟล์ที่ต้องพิมพ์เยอะแยะด้วยแล้วก็ คงไม่สนุกนักกับการต้องมาเปิด sheet แต่ละหน้าแล้วสั่งพิมพ์ ไปจนครบทุกแผ่น

วันนี้ผมมีทีเด็ด มาฝาก เกี่ยวกับการทำ Auto Print ใน MS Excel โดยเพียงแค่คุณเลือกว่าจะพิมพ์ไฟล์ใหนบ้าง เจ้าโปรแกรม Auto Print ก็จะพิมพ์ให้คุณครบทุกหน้า ครบทุกไฟล์ เลยทีเดียว ทีนี้คุณก็มีเวลาไปนั่งจิบกาแฟสบายๆ แล้วล่ะ ^^

เริ่มเลยนะครับ ผมใช้เครื่องมือที่สุดยอดมากที่มีมากลับ MS Excel อยู่แล้วนั่นก็คือ VBA (มาจากคำว่า Visual Basic for Application) คุณสามารถเข้าไปดูได้ว่าหน้าตาของเจ้า VBA นี้เป็นอย่างไรเพียงเปิดโปรแกรม MS Excel ขึ้นมา หลังจากนั้นก็กดปุ๋ม Alt+F11 (กดปุ่ม Altinate พร้อมกับ ปุ่ม F11) เท่านี้ก็จะมีหน้าต่างของ VBA ขึ้นมา หน้าตาก็จะแตกต่างกันไปตามเวอร์ชันของ MS Excel นะครับ

ไม่ว่าหน้าตาขอ VBA จะเป็นอย่างไรก็ตาม เพียงแค่คุณทำตามขั้นตอนต่อไปนี้คุณก็จะได้ Auto Print แล้ว

เปิดโปรแกรม MS Excel ขึ้นมา แล้ว กดคีย์ Alt+F11 เพื่่อเข้าสู่หน้าต่างของVBA
ในหน้าต่าง VBA ให้มองหาเมนูบนแถบเมนูบนสุดที่ชื่อว่า Insert (หรือ "แทรก" ในภาษาไทย) แล้วเลือกเมนูย่อย Module (โมดูล) ที่อยู่ในนั้นอีกที แล้วจะมีหน้าต่างอีกอันหนึ่งเปิดขึ้นมา
ให้ทำการ copy คำสั่งด้านล่างนี้ (ที่อยู่ระหว่างเส้นประ)ไปวางในหน้าต่างของ Module แล้วบันทึกไฟล์
Run หรือ เรียกใช้งานโปรแกรม โดยไปที่เมนู Run > Run Sub/Userform (หรืออาจใช้วิธีกดปุ่ม F5) แล้วจะมีอีกหน้าต่างหนึ่งเปิดขึ้นมาเพื่อให้เราเลือกไฟล์ที่จะพิมพ์ทั้งหมด เทคนิคในการเลือกหลายไฟล์นะครับ ก็กดปุ่ม Ctrl ค้างไว้ แล้วก็คลิ๊กเลือกไฟล์ที่ต้องการพิมพ์ไปเรื่อยๆจนครบ แล้วปล่อยปุ่ม Ctrl หลังจากนั้นก็ คลิกที่ปุ่ม Open File หรือเปิด (หรืออาจกดปุ่ม Enter แทนก็ได้) เท่านี้เครื่องพิมพ์ก็จะเริ่มทำงานแทนคุณแล้ว
หมายเหตุ: โปรแกรมนี้มันจะพิมพ์ทุกอย่างที่มีอยู่ในหน้าที่มีข้อมูลนะครับ ถ้าไม่มีข้อมูลไม่พิมพ์ ดังนั้น ก่อนสั่งพิมพ์ควรมีการจัดหน้าไว้ให้เรียบร้อยหมดก่อน ไม่งั้นโปรแกรมจะพิมพ์ทุกอย่างออกมาจริงๆครับ

ขอให้สนุกกับ Auto Print ใน MS Excel โดย VBA นะครับ^^
--------------------------------------------------------------------------------------------------------

Sub auto_print()
'
'This macro was written by Aj OP (http://thaiexcelvba.blogspot.com) .
'
Dim i As Integer, j As Integer
Dim varFile As Variant
Dim inFile As Integer
Dim OPENFILE
Dim currFile
Dim N
'
Application.ScreenUpdating = False
On Error GoTo 100
'
currFile = ActiveWorkbook.Name
varFile = _
Application.GetOpenFilename(FileFilter:="Microsoft Excel file, *.xlsx", MultiSelect:=True)
If (IsArray(varFile)) Then
For intfile = 1 To UBound(varFile)
Workbooks.OpenText Filename:=varFile(intfile)
OPENFILE = ActiveWorkbook.Name
'
For N = 1 To ActiveWorkbook.Sheets.Count
Sheets(N).Activate
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Next N
Workbooks(OPENFILE).Close
Next intfile
Else
MsgBox "You did not select any file.", vbOKOnly + vbInformation
End If

100 End Sub