Page 1 of 1

vba ปิดโปรแกรมไม่ได้

Posted: Wed Jul 08, 2015 10:07 pm
by sutham
ผมได้สร้างไฟล์ขึ้นมา 2 ไฟล์ คือ copy1 และ copy2 โดยทั้ง 2 ไฟล์ ผมได้เขียน code ให้ยกเลิกการทำงานของปุ่มกาบาทที่มุมบนขวา เนื่องจากต้องการให้ใช้ปุ่มที่สร้างขึ้นเท่านั้น
โดยสิ่งที่ผมต้องการ คือ คัดลอกข้อมูลในเซลล์ A1 ในไฟล์ copy2 มาไว้ใน A1 ของไฟล์ copy1 โดยผ่านการกดปุ่ม โอนข้อมูล ในไฟล์ copy1 เมื่อคัดอกข้อมูลเสร็จต้องการให้ปิดไฟล์ copy2 อัตโนมัติ แต่ไฟล์ copy1 ยังอยู่เพื่อทำงานต่อ แต่โค้ดที่ผมปรับได้ คือ คัดลอกข้อมูลได้ แต่ไฟล์ copy2 ไม่ปิดไป ผมจะต้องแก้ไขหรือปรับโค้ดอย่างไร :)

โค้ดสำหรับปุ่มโอนข้อมูล ในไฟล์ copy1

Code: Select all

Sub add()
Windows("copy2").Activate
Range("a1").Copy
Windows("copy1").Activate
Range("a1").PasteSpecial
Windows("copy2").Activate
Application.DisplayAlerts = False
ActiveWorkbook.Save
Application.Quit
Windows("copy1").Activate
MsgBox "การโอนข้อมูลสำเร็จ"
End Sub

Re: vba ปิดโปรแกรมไม่ได้

Posted: Wed Jul 08, 2015 10:16 pm
by snasui
:D ปรับ Code เป็นตามด้านล่างครับ

Code: Select all

'Other code
ActiveWorkbook.Save
ActiveWorkbook.Close
'Other code

Re: vba ปิดโปรแกรมไม่ได้

Posted: Wed Jul 08, 2015 10:37 pm
by sutham
snasui wrote::D ปรับ Code เป็นตามด้านล่างครับ

Code: Select all

'Other code
ActiveWorkbook.Save
ActiveWorkbook.Close
'Other code
ผมลองปรับแล้วครับ ดังนี้

Code: Select all

Sub add()
Windows("copy2").Activate
Range("a1").Copy
Windows("copy1").Activate
Range("a1").PasteSpecial
Windows("copy2").Activate
Application.DisplayAlerts = False
ActiveWorkbook.Save
ActiveWorkbook.Close
Windows("copy1").Activate
MsgBox "การโอนข้อมูลสำเร็จ"
End Sub
แต่ไฟล์ copy2 ยังไม่ถูกปิดครับ หรือผมปรับส่วนไหนผิดอีกครับ :)

Re: vba ปิดโปรแกรมไม่ได้

Posted: Wed Jul 08, 2015 10:48 pm
by snasui
:D ในเครื่องผมปิดได้ครับ

การอ้างอิงไฟล์ให้อ้างอิงนามสกุลด้วย เช่น Windows("copy1").Activate ควรปรับเป็น Windows("Copy1.xlsm").Activate

และจาก Code ที่เขียนมาสามารถยุบเหลือเป็นเช่น

Code: Select all

Workbooks("copy1.xlsm").Sheets("Sheet1").Range("a1").Value _
    = Workbooks("copy2.xlsm").Sheets("Sheet1").Range("a1").Value
Workbooks("Copy2.xlsm").Close 
ในกรณีที่ปิดไม่ได้ให้ตรวจสอบ Event Workbook_BeforeClose ว่าได้เขียนไว้ในลักษณะเป็นอุปสรรคต่อการปิดไฟล์หรือไม่ครับ