: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

อยากได้ code vba คัดลอกข้อมูล ข้ามไฟล์ พื้นฐาน

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
nutpochan
Member
Member
Posts: 99
Joined: Mon Mar 03, 2014 8:24 am

อยากได้ code vba คัดลอกข้อมูล ข้ามไฟล์ พื้นฐาน

#1

Post by nutpochan »

อยากได้ code vba คัดลอกข้อมูล ข้ามไฟล์ พื้นฐาน จากไฟล์หนึ่งไปยังอีกไฟล์หนึ่งโดยที่ ไฟล์หนึ่งอยู่ไดร์ D อีกไฟล์หนึ่งอยู่ไดร์ C ครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากได้ code vba คัดลอกข้อมูล ข้ามไฟล์ พื้นฐาน

#2

Post by snasui »

:D Code ต้องเขียนมาเอง ถามกันเฉพาะที่ติดปัญหาตามกฎการใช้บอร์ดข้อ 5 ด้านบนครับ :roll:
nutpochan
Member
Member
Posts: 99
Joined: Mon Mar 03, 2014 8:24 am

Re: อยากได้ code vba คัดลอกข้อมูล ข้ามไฟล์ พื้นฐาน

#3

Post by nutpochan »

ไฟล์แนบมาให้แล้วครับ


พอผมใช้บันทึกไมโครมันกลับกลายเป็นคำสั่งยังงี้ซะงั้น

Code: Select all

    Range("A2:M11").Select
    Range("M11").Activate
    Selection.Copy
    Windows("dw.xlsx").Activate
    ActiveSheet.Paste
    Range("M11").Activate
    Selection.Copy
    Windows("dw2.xlsx").Activate
    ActiveSheet.Paste
ที่ต้องการจริงๆ จะมีไฟล์3ไฟล์ ไฟล์ dwรวม,dw,dw2 พอเราเปิดไฟล์dwมา อยากใช้vba ดึงช่วงข้อมูลที่เป็นนไดนามิกที่เริ่มจาก A2:M1 ล่างจนไปถึงช่วงข้อมูลสุดท้าย
Attachments
dw.xlsm
(13.5 KiB) Downloaded 40 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากได้ code vba คัดลอกข้อมูล ข้ามไฟล์ พื้นฐาน

#4

Post by snasui »

:D ช่วยแนบไฟล์ตัวอย่างข้อมูล ตัวอย่างผลลัพธ์ที่ต้องการมาด้วยครับ
nutpochan
Member
Member
Posts: 99
Joined: Mon Mar 03, 2014 8:24 am

Re: อยากได้ code vba คัดลอกข้อมูล ข้ามไฟล์ พื้นฐาน

#5

Post by nutpochan »

Code: Select all

Sub Macro1()
'
' Macro1 Macro
Dim wb As Variant

Set wb = Workbooks.Open("C:\Users\admin\Desktop\dtac.xls", False, False)
'wb("db.xls").Activate
ActiveWorkbook.Worksheets("dtac").Select
    Range("A2:E12").Select
    Selection.Copy
Workbooks("dtac.xls").Close
Windows("db.xlsm").Activate
    Range("H2").Select
    ActiveSheet.Paste
End Sub

จากที่ผมลองเอาโค๊ดมาปะติดปะต่อกัน จนสำเร็จแล้วครับ
nutpochan
Member
Member
Posts: 99
Joined: Mon Mar 03, 2014 8:24 am

Re: อยากได้ code vba คัดลอกข้อมูล ข้ามไฟล์ พื้นฐาน

#6

Post by nutpochan »

พอแล้วใจหลักการแล้วง่ายนิดเดียว
nutpochan
Member
Member
Posts: 99
Joined: Mon Mar 03, 2014 8:24 am

Re: อยากได้ code vba คัดลอกข้อมูล ข้ามไฟล์ พื้นฐาน

#7

Post by nutpochan »

เราจะแก้ alert ที่ออกมว่า "There is a large amount of information on the Clipboard. Do you want to ...." ตอนเอาข้อมูลก่อนนำไปวางยังไงครับ

คือไม่อยากให้มันแสดงเตือนขึ้นมาอยากกดใช่อัตโลมัติไปเลย
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากได้ code vba คัดลอกข้อมูล ข้ามไฟล์ พื้นฐาน

#8

Post by snasui »

:D การ Copy ช่วงข้อมูลเล็ก ๆ ตาม Code ที่แนบมา Clipboard ไม่ควรจะมีขนาดใหญ่และไม่ควรจะมีการฟ้อง เข้าใจว่ามีการทำซ้ำ ๆ หลายรอบจึงเกิดการฟ้อง

สำหรับการยกเลิกการฟ้องวิธีการหนึ่งคือหลังจากวางข้อมูลแล้วให้เพิ่ม Code บรรทัดนี้เข้าไปยกเลิกการ Copy ครับ Application.CutCopyMode = False
nutpochan
Member
Member
Posts: 99
Joined: Mon Mar 03, 2014 8:24 am

Re: อยากได้ code vba คัดลอกข้อมูล ข้ามไฟล์ พื้นฐาน

#9

Post by nutpochan »

Code: Select all

Sub Macro1()
'
' Macro1 Macro
Dim wb As Variant

Set wb = Workbooks.Open("C:\Users\admin\Desktop\[color=#FF0000]dtac.xls[/color]", False, False)
'wb("[color=#0000FF]db.xls[/color]").Activate
ActiveWorkbook.Worksheets("dtac").Select
    Range("A2:E12").Select
    Selection.Copy
Workbooks("[color=#FF0000]dtac.xls[/color]").Close
Windows("db.xlsm").Activate
    Range("H2").Select
    ActiveSheet.Paste
End Sub
ถ้าเราจะ ให้ตัวสีแดงในโค๊ด เปลี่ยนแปลงไปตามเซลซึ่งเราไม่ต้องเปิดvbaเพื่อแก้ไขโค๊ดแต่ จะให้มันเปลี่ยนแปลงไปตามเซลในเอ็กเซล เช่น เซล c3แสดงdtac.xls ซึ่งจะเชื่อมโยงไปในโค๊ดอัตโลมัติ ควรจะเปลี่ยนแปลงโค๊ดอย่างไรครับ
Attachments
2.xlsm
(16.55 KiB) Downloaded 28 times
dtac.xls
(10.95 KiB) Downloaded 31 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากได้ code vba คัดลอกข้อมูล ข้ามไฟล์ พื้นฐาน

#10

Post by snasui »

:D ผมลบ Code ที่โพสต์ล่าสุดทิ้งไปเองครับ

สำหรับที่ถามมานั้นสามารถเปลียนเป็น Set wb = Workbooks.Open("C:\Users\admin\Desktop\" & range("c3").value, False, False) หากค่าใน C3 คือ dtac.xls

:!: การโพสต์แบบถามเฉพาะจุด สามารถยกมาถามเพียงส่วนหนึ่งของ Code ยกตัวอย่างคำถาม เช่น จาก Code
Set wb = Workbooks.Open("C:\Users\admin\Desktop\dtac.xls", False, False) หากต้องการให้ส่วนของ
dtac.xls เป็นค่าในเซลล์ C3 สามารถปรับ Code เป็นอยางไร

การเขียนข้อความให้เป็นตามด้านบน :roll: ให้ใช้ Place pain text inside "" tags ตามตัวอย่างในภาพด้านล่าง
Attachments
PlainTextInside.png
PlainTextInside.png (9.26 KiB) Viewed 621 times
nutpochan
Member
Member
Posts: 99
Joined: Mon Mar 03, 2014 8:24 am

Re: อยากได้ code vba คัดลอกข้อมูล ข้ามไฟล์ พื้นฐาน

#11

Post by nutpochan »

ActiveWorkbook.Worksheets("dtac").Select

ผมลองเอามาปรับใช้กับโค๊ดด้านบน เปลี่ยนจากc1เป็น c2 เป็น

ActiveWorkbook.Worksheets("& range("c2").value").Select

ปรากฏว่ามันdebug ครับไม่รู้ว่าควรแก้ไขอย่างไร
nutpochan
Member
Member
Posts: 99
Joined: Mon Mar 03, 2014 8:24 am

Re: อยากได้ code vba คัดลอกข้อมูล ข้ามไฟล์ พื้นฐาน

#12

Post by nutpochan »

ค่าใน c3 ก็คือ dtac
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากได้ code vba คัดลอกข้อมูล ข้ามไฟล์ พื้นฐาน

#13

Post by snasui »

nutpochan wrote:ActiveWorkbook.Worksheets("dtac").Select

ผมลองเอามาปรับใช้กับโค๊ดด้านบน เปลี่ยนจากc1เป็น c2 เป็น

ActiveWorkbook.Worksheets("& range("c2").value").Select

ปรากฏว่ามันdebug ครับไม่รู้ว่าควรแก้ไขอย่างไร
:D จาก ActiveWorkbook.Worksheets("& range("c2").value").Select
ที่ถูกคือ ActiveWorkbook.Worksheets(range("c2").value).Select จะเปลี่ยนเป็นเซลล์ใดก็ให้เปลี่ยนที่ range("c2").value ได้ตามต้องการครับ
nutpochan
Member
Member
Posts: 99
Joined: Mon Mar 03, 2014 8:24 am

Re: อยากได้ code vba คัดลอกข้อมูล ข้ามไฟล์ พื้นฐาน

#14

Post by nutpochan »

จากคำสั่ง วนลูปที่เป็น

Code: Select all

For counter = start To end [Step step] 
    [statements] 
    [Exit For] 
    [statements] 
Next [counter]

ถ้าผมต้องการ วนลูปคำสั่งเดิม ซ้ำตามจำนวนที่เราต้องการ ตามคำสั่ง

Code: Select all

Dim wb As Variant

Set wb = Workbooks.Open("C:\Users\admin\Desktop\" & Range("a1").Value, False, False)
'wb("db.xls").Activate
    Range("A2:E300").Select
    Selection.Copy


Windows("db.xlsm").Activate
    Range("H2").Select
    ActiveSheet.Paste
     Range("b1").Select
    Selection.Copy
    
    Workbooks("" & Range("a1")).Close

ซึ่งในที่นี้ผมขออธิบายว่า ลูปที่ 1 สูตร Set wb = Workbooks.Open("C:\Users\admin\Desktop\" & Range("a1").Value, False, False)

ลูปที่ 2 ในสูตร Set wb = Workbooks.Open("C:\Users\admin\Desktop\" & Range("a2").Value, False, False)

ลูปที่ 3 ในสูตร Set wb = Workbooks.Open("C:\Users\admin\Desktop\" & Range("a3").Value, False, False)

คือวนแล้วจะเปลี่ยนแค่ ลูปหนึ่ง a1 ลูป2 a2 ลูป3 a3 นอกนั้นคำสั่งคืออื่นยังเหมือนเดิม

เราจะเขียนคำสั่งวนลูป ให้ทำตามคำสั่งซ้ำแล้วซ้ำเล่าอย่างไรดีครับ ผมลองเอามาเชื่อมกันแล้วมัน ติดตลอด
nutpochan
Member
Member
Posts: 99
Joined: Mon Mar 03, 2014 8:24 am

Re: อยากได้ code vba คัดลอกข้อมูล ข้ามไฟล์ พื้นฐาน

#15

Post by nutpochan »

อธิบายเพิ่มเติม
คำสั่งแต่ละลูปคือ

Code: Select all

Dim wb As Variant

Set wb = Workbooks.Open("C:\Users\admin\Desktop\" & Range("a1").Value, False, False)
'wb("db.xls").Activate
    Range("A2:E300").Select
    Selection.Copy


Windows("db.xlsm").Activate
    Range("H2").Select
    ActiveSheet.Paste
     Range("b1").Select
    Selection.Copy
    
    Workbooks("" & Range("a1")).Close
เปลี่ยนเฉพาะ a1,a2,a3 ที่ Set wb = Workbooks.Open("C:\Users\admin\Desktop\" & Range("a1").Value, False, False) ในแต่ละรอบที่วน
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากได้ code vba คัดลอกข้อมูล ข้ามไฟล์ พื้นฐาน

#16

Post by snasui »

:D ตัวอย่าง Code ตามด้านล่างครับ

Code: Select all

Dim rAll As Range
Dim r As Range
Set rAll = Range("a1:a3")
For Each r In rAll
    Set wb = Workbooks.Open("C:\Users\admin\Desktop\" & r.Value, False, False)
    'wb("db.xls").Activate
    Range("A2:E300").Select
    Selection.Copy
    Windows("db.xlsm").Activate
    Range("H2").Select
    ActiveSheet.Paste
    Range("b1").Select
    Selection.Copy
    Workbooks(r.Value).Close
Next r
nutpochan
Member
Member
Posts: 99
Joined: Mon Mar 03, 2014 8:24 am

Re: อยากได้ code vba คัดลอกข้อมูล ข้ามไฟล์ พื้นฐาน

#17

Post by nutpochan »

Code: Select all

Dim rAll As Range
Dim r As Range
Set rAll = Range("a1:a3")
For Each r In rAll
    Set wb = Workbooks.Open("C:\Users\admin\Desktop\" & r.Value, False, False)
    'wb("db.xls").Activate
    Range("A2:E300").Select
    Selection.Copy
    Windows("db.xlsm").Activate
    Range("H2").Select
    ActiveSheet.Paste
    Range("b1").Select
    Selection.Copy
    Workbooks(r.Value).Close
Next r
จากคำสั่ง ในช่วง

Code: Select all

    Set wb = Workbooks.Open("C:\Users\admin\Desktop\" & r.Value, False, False)


ถ้าไม่รู้ชื่อไฟล์ หรือชื่อไฟล์มีจำนวนมาก เรียงลำดับไม่แน่นอน เราไม่มาสารถหาชื่อไฟล์มาลงไนคอลัม r ได้ เราจะสามารถสร้าง combo list box (เคยเห็นเขาทำ) ที่จะลากไฟล์มาลงเลยได้ไหมครับ แล้วเราจะเขียนคำสั่งว่าอย่างไร
User avatar
logic
Gold
Gold
Posts: 1511
Joined: Thu Mar 18, 2010 1:57 pm
Excel Ver: 365

Re: อยากได้ code vba คัดลอกข้อมูล ข้ามไฟล์ พื้นฐาน

#18

Post by logic »

ผมลองค้นดูพบลิ้งค์นี้ http://stackoverflow.com/questions/2056 ... e-and-path ลองทำตามดูครับ :)
nutpochan
Member
Member
Posts: 99
Joined: Mon Mar 03, 2014 8:24 am

Re: อยากได้ code vba คัดลอกข้อมูล ข้ามไฟล์ พื้นฐาน

#19

Post by nutpochan »

เขาให้ทำอะไรไม่เข้าใจเลยครับ :?:

เราจะคัดลอก

Code: Select all

Private Sub TreeView1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)
    StrPath = Data.Files(1)
End Sub
ไปใว้แทนที่ตรงไหรหรอครับ
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: อยากได้ code vba คัดลอกข้อมูล ข้ามไฟล์ พื้นฐาน

#20

Post by bank9597 »

ลองแนบไฟล์ตัวอย่างมาครับ พร้อมยกตัวอย่างที่ต้องการมาอีกครั้งครับ
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
Post Reply