EXCEL TOOLS
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
[code]
และปิดด้วย [/code]
ตัวอย่างเช่น [code]dim r as range[/code]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)Code: Select all
Sub ดึงข้อมูล()
Application.ScreenUpdating = False
Windows("Sheet1").Activate
Cells.Select
Selection.Copy
Windows("2.ตัดสรุป จ่ายแหล่งผลิต.xlsm").Activate '<<สมุดงานนี้จะเปิดอยู่ตอนรันโค๊ดครับ
Cells.Select
ActiveSheet.Paste
Range("A1").Select
Application.ScreenUpdating = True
End Sub
error ตรงบรรทัดนี้ครับsnasui wrote: Wed Sep 07, 2022 11:27 am ลอง Debug ดูว่าเกิดจากปัญหาที่บรรทัดไหน วิธีการ Debug ดูจากโพสต์นี้ครับ viewtopic.php?f=3&t=17483&p=103247#p103247
Code: Select all
Windows("Sheet1").Activate
?Windows("Sheet1").Name
> Enter สังเกตผลลัพธ์ที่ได้?Windows(1).Name
> Enter สังเกตผลลัพธ์ที่ได้Windows("Sheet1").Activate
Windows("Sheet1").Activate
เป็นการทำให้ไฟล์ Sheet1 Active ขึ้นมาเพื่อใช้งาน ก่อนที่จะ เป็น Cells.Select
ควรเป็น Worksheets("xyz").Select
เสียก่อนเพื่อบอกว่าทำงานกับชีต xyz หากไม่มีบรรทัดนี้โปรแกรมจะทราบได้อย่างไรว่าทำงานกับชีตไหน ลองบันทึก Macro ดูใหม่เพื่อตรวจสอบว่ามีการ Generate Code มาครบถ้วนแล้วครับลองทำตามที่อาจารย์แนะนำแล้วพบว่ายังพบปัญหาเหมือนเดิมครับ เลยลองค้นหาในเพจต่างชาติ จากที่ผมลองทำตามเท่าที่แปลได้ปรากฏว่าเขาแนะนำให้เปิดไฟล์ที่เป็นไฟล์โปรแกรมผ่านเมนู File>Open แล้วกดรันโค๊ดถึงจะสามารถรันโค๊ดได้โดยไม่มี error ครับ เนื่องsnasui wrote: Wed Sep 07, 2022 4:55 pm ลองทำดังนี้ครับ
เปิดไฟล์โปรแแกรมและไฟล์ Sheet1 แค่ 2 ไฟล์ > ไปที่ไฟล์โปรแกรม > เข้าหน้าต่าง VBE (หากอยู่ที่ Excel กดแป้น Alt+F11) > กดแป้น Ctrl+G เพื่อเปิดหน้าต่าง Immediate Windows > คีย์?Windows("Sheet1").Name
> Enter สังเกตผลลัพธ์ที่ได้
คีย์เป็น?Windows(1).Name
> Enter สังเกตผลลัพธ์ที่ได้
เปลี่ยนเลข 1 เป็น 2 สังเกตดูผล
คำตอบที่ควรได้คือ ชื่อไฟล์ Book1 ที่ถูกต้องกับชื่อไฟล์โปรแกรมที่ถูกต้อง เมื่อได้ชื่อไฟล์ Sheet1 ที่ถูกต้องแล้วค่อยนำไปแทนที่ใน StatementWindows("Sheet1").Activate
Code นี้ยังขาดบรรทัดที่ควรมีอีก 1 บรรทัด นั่นคือเมื่อWindows("Sheet1").Activate
เป็นการทำให้ไฟล์ Sheet1 Active ขึ้นมาเพื่อใช้งาน ก่อนที่จะ เป็นCells.Select
ควรเป็นWorksheets("xyz").Select
เสียก่อนเพื่อบอกว่าทำงานกับชีต xyz หากไม่มีบรรทัดนี้โปรแกรมจะทราบได้อย่างไรว่าทำงานกับชีตไหน ลองบันทึก Macro ดูใหม่เพื่อตรวจสอบว่ามีการ Generate Code มาครบถ้วนแล้วครับ
Windows
เป็น Workbooks
แต่ก็ยินดีด้วยที่ได้คำตอบแล้วครับขอบคุณครับผม สำหรับความรู้และคำแนะนำ จะนำไปปรับปรุงและใช้งานต่อไปครับผมsnasui wrote: Fri Sep 09, 2022 11:25 pm ผมลืมแก้คำว่าWindows
เป็นWorkbooks
แต่ก็ยินดีด้วยที่ได้คำตอบแล้วครับ
สำหรับการเปิดด้วยการ Double Click จะแตกต่างจากการเปิดผ่านเมนู File เพราะเราสามารถกำหนดใน Excel ได้ว่าให้ปฏิเสธการเปิดด้วย Application อื่นที่ใช้ DDE หรือไม่ โดยเข้าผ่านเมนู File > Options > Advanced > ที่ General คลิกที่ Ignore other applications that use Dynamic Data Exchange (DDE)
การเปิดด้วยการ Double click ใน File Explorer ถือเป็นการเปิดด้วย Other Application การส่งผ่านข้อมูลด้วย Protocol DDE อาจถูกปิดกั้น ใน Version ก่อน ๆ ในอดีต หากกำหนดไว้เช่นนี้จะเปิดไฟล์ไม่ขึ้น ปัจจุบันลองด้วย O365 สามารถเปิดไฟล์ได้แต่ยังไม่เคยทดสอบว่าเรียกใช้ด้วย VBA แล้วจะมีปัญหาเช่นที่ถามมานี้หรือไม่ครับ