:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

คัดลอกข้อมูลจากสมุดงานที่สร้างใหม่ไปยังสมุดงานอื่นไม่ได้

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
sosadboy
Member
Member
Posts: 64
Joined: Tue Sep 12, 2017 3:47 pm

คัดลอกข้อมูลจากสมุดงานที่สร้างใหม่ไปยังสมุดงานอื่นไม่ได้

#1

Post by sosadboy »

ผมใช้โค๊ด VBA ในการคัดลอกข้อมูลจากสมุดงานที่พึ่งสร้างใหม่ ซึ่งเป็นสมุดงานที่ออกมาจากโปรแกรมของทางบริษัทในรูปแบบของสมุด
งาน excel ปัญหาที่พบคือ โค๊ดที่เขียนใช้กับเครื่องตัวเองได้ตามปกติ แต่พอเอาโค๊ดไปใช้กับบางเครื่องในเครือข่าย พบว่าโค๊ดไม่ทำงาน
โค๊ดที่ใช้คือ

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 
Windows("Sheet1") คือ รายงานที่ออกมาจากโปรแกรมในรูปแบบสมุดงาน Excel ครับ โดยที่ยังไม่ได้ทำการ Save ครับ เท่าที่สังเกตการทำงานของโค๊ดในเครื่องที่ติดปัญหา เหมือนว่าโค๊ดมองไม่เห็นหน้าต่าง ("Sheet1") ครับ ผมจึงสงสัยว่าเป็นปัญหาที่การตั้งค่าของ Excel
หรือไม่ครับทำให้ใช้งานโค๊ดในบางเครื่องไม่ได้ จึงมาสอบถามผู้รู้ครับผม MS ที่ใช้เวอร์ชั่น 2016 ครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30747
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: คัดลอกข้อมูลจากสมุดงานที่สร้างใหม่ไปยังสมุดงานอื่นไม่ได้

#2

Post by snasui »

:D ลอง Debug ดูว่าเกิดจากปัญหาที่บรรทัดไหน วิธีการ Debug ดูจากโพสต์นี้ครับ viewtopic.php?f=3&t=17483&p=103247#p103247
sosadboy
Member
Member
Posts: 64
Joined: Tue Sep 12, 2017 3:47 pm

Re: คัดลอกข้อมูลจากสมุดงานที่สร้างใหม่ไปยังสมุดงานอื่นไม่ได้

#3

Post by sosadboy »

snasui wrote: Wed Sep 07, 2022 11:27 am :D ลอง Debug ดูว่าเกิดจากปัญหาที่บรรทัดไหน วิธีการ Debug ดูจากโพสต์นี้ครับ viewtopic.php?f=3&t=17483&p=103247#p103247
error ตรงบรรทัดนี้ครับ

Code: Select all

     Windows("Sheet1").Activate 
ขึ้นข้อความ Alert ว่า "Run-time error '9': Subscript out of range" ครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30747
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: คัดลอกข้อมูลจากสมุดงานที่สร้างใหม่ไปยังสมุดงานอื่นไม่ได้

#4

Post by snasui »

:D ลองทำดังนี้ครับ

เปิดไฟล์โปรแแกรมและไฟล์ Sheet1 แค่ 2 ไฟล์ > ไปที่ไฟล์โปรแกรม > เข้าหน้าต่าง VBE (หากอยู่ที่ Excel กดแป้น Alt+F11) > กดแป้น Ctrl+G เพื่อเปิดหน้าต่าง Immediate Windows > คีย์ ?Windows("Sheet1").Name > Enter สังเกตผลลัพธ์ที่ได้

คีย์เป็น ?Windows(1).Name > Enter สังเกตผลลัพธ์ที่ได้

เปลี่ยนเลข 1 เป็น 2 สังเกตดูผล

คำตอบที่ควรได้คือ ชื่อไฟล์ Book1 ที่ถูกต้องกับชื่อไฟล์โปรแกรมที่ถูกต้อง เมื่อได้ชื่อไฟล์ Sheet1 ที่ถูกต้องแล้วค่อยนำไปแทนที่ใน Statement Windows("Sheet1").Activate

Code นี้ยังขาดบรรทัดที่ควรมีอีก 1 บรรทัด นั่นคือเมื่อWindows("Sheet1").Activate เป็นการทำให้ไฟล์ Sheet1 Active ขึ้นมาเพื่อใช้งาน ก่อนที่จะ เป็น Cells.Select ควรเป็น Worksheets("xyz").Select เสียก่อนเพื่อบอกว่าทำงานกับชีต xyz หากไม่มีบรรทัดนี้โปรแกรมจะทราบได้อย่างไรว่าทำงานกับชีตไหน ลองบันทึก Macro ดูใหม่เพื่อตรวจสอบว่ามีการ Generate Code มาครบถ้วนแล้วครับ
sosadboy
Member
Member
Posts: 64
Joined: Tue Sep 12, 2017 3:47 pm

Re: คัดลอกข้อมูลจากสมุดงานที่สร้างใหม่ไปยังสมุดงานอื่นไม่ได้

#5

Post by sosadboy »

ขอบคุณครับ จะลองทำตามที่อาจารย์ แล้วรายงานผลให้ทราบครับ
sosadboy
Member
Member
Posts: 64
Joined: Tue Sep 12, 2017 3:47 pm

Re: คัดลอกข้อมูลจากสมุดงานที่สร้างใหม่ไปยังสมุดงานอื่นไม่ได้

#6

Post by sosadboy »

snasui wrote: Wed Sep 07, 2022 4:55 pm :D ลองทำดังนี้ครับ

เปิดไฟล์โปรแแกรมและไฟล์ Sheet1 แค่ 2 ไฟล์ > ไปที่ไฟล์โปรแกรม > เข้าหน้าต่าง VBE (หากอยู่ที่ Excel กดแป้น Alt+F11) > กดแป้น Ctrl+G เพื่อเปิดหน้าต่าง Immediate Windows > คีย์ ?Windows("Sheet1").Name > Enter สังเกตผลลัพธ์ที่ได้

คีย์เป็น ?Windows(1).Name > Enter สังเกตผลลัพธ์ที่ได้

เปลี่ยนเลข 1 เป็น 2 สังเกตดูผล

คำตอบที่ควรได้คือ ชื่อไฟล์ Book1 ที่ถูกต้องกับชื่อไฟล์โปรแกรมที่ถูกต้อง เมื่อได้ชื่อไฟล์ Sheet1 ที่ถูกต้องแล้วค่อยนำไปแทนที่ใน Statement Windows("Sheet1").Activate

Code นี้ยังขาดบรรทัดที่ควรมีอีก 1 บรรทัด นั่นคือเมื่อWindows("Sheet1").Activate เป็นการทำให้ไฟล์ Sheet1 Active ขึ้นมาเพื่อใช้งาน ก่อนที่จะ เป็น Cells.Select ควรเป็น Worksheets("xyz").Select เสียก่อนเพื่อบอกว่าทำงานกับชีต xyz หากไม่มีบรรทัดนี้โปรแกรมจะทราบได้อย่างไรว่าทำงานกับชีตไหน ลองบันทึก Macro ดูใหม่เพื่อตรวจสอบว่ามีการ Generate Code มาครบถ้วนแล้วครับ
ลองทำตามที่อาจารย์แนะนำแล้วพบว่ายังพบปัญหาเหมือนเดิมครับ เลยลองค้นหาในเพจต่างชาติ จากที่ผมลองทำตามเท่าที่แปลได้ปรากฏว่าเขาแนะนำให้เปิดไฟล์ที่เป็นไฟล์โปรแกรมผ่านเมนู File>Open แล้วกดรันโค๊ดถึงจะสามารถรันโค๊ดได้โดยไม่มี error ครับ เนื่อง
จากไม่เก่งภาษาอังกฤษผมเลยไม่แน่ใจว่าจะอธิบายวิธีการแก้ไขนี้ว่าอย่างไรครับ เพียงแค่ทำตามที่เขาแนะนำเท่าที่พอแปลออกครับผม
ถ้าเป็นไปได้ อยากขอให้อาจารย์อธิบายเพิ่มในส่วนนี้ให้หน่อยครับ ว่าการที่เราเปิดไฟล์ผ่านเมนู File>Open แตกต่างจากที่เราเปิดไฟล์
โปรแกรมผ่านไอคอนของไฟล์อย่างไรครับผม เพื่อเป็นแนวทางในการศึกษาเรื่อง VBA ต่อไปครับ ขอบคุณครับผม
User avatar
snasui
Site Admin
Site Admin
Posts: 30747
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: คัดลอกข้อมูลจากสมุดงานที่สร้างใหม่ไปยังสมุดงานอื่นไม่ได้

#7

Post by snasui »

:o ผมลืมแก้คำว่า 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 แล้วจะมีปัญหาเช่นที่ถามมานี้หรือไม่ครับ
sosadboy
Member
Member
Posts: 64
Joined: Tue Sep 12, 2017 3:47 pm

Re: คัดลอกข้อมูลจากสมุดงานที่สร้างใหม่ไปยังสมุดงานอื่นไม่ได้

#8

Post by sosadboy »

snasui wrote: Fri Sep 09, 2022 11:25 pm :o ผมลืมแก้คำว่า 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 แล้วจะมีปัญหาเช่นที่ถามมานี้หรือไม่ครับ
ขอบคุณครับผม สำหรับความรู้และคำแนะนำ จะนำไปปรับปรุงและใช้งานต่อไปครับผม
Post Reply