Page 1 of 1
อยากทราบวิธีสร้าง ปุ่ม VBA เพื่อ คัดลอก รายชื่อจากไฟล์ excel
Posted: Fri Jul 01, 2011 10:00 am
by kingarthers
คือแบบนี้ครับ ผมสร้างไฟล์ excel เพื่อสร้างสูตรและส่งไปยังไซด์งานตจว.โดยจะเป็นตารางรายชื่อพนักงานและค่าแรง
และจะพบปัญหาคือ เมื่อผมแก้ไข ไฟล์ต้นฉบับ และส่งไปให้ที่ ทุกไซด์ใหม่ เนื่องจากบางทีอาจจะต้องเพิ่ม sheet หรือแก้สูตรใหม่ค่อนข้างเยอะ ตามการเปลี่ยนแปลงต่างๆ
ทำให้หน้างานจะต้องพิมรายชื่อในไฟล์ใหม่ทุกครั้ง
พอจะมีวิธี สร้างปุ่ม เขียนคำสั่ง VBA ขึ้นมาเพื่อคัดลอก รายชื่อใน คอลัมที่ระบุไว้ (ตำแหน่งรายชื่อจะเหมือนเดิมทุกครั้ง) และคัดลอกมาใส่ใน ไฟล์ excel ไฟล์ใหม่ได้หรือไม่ครับ โดยเมื่อกดปุ่มเพื่อคัดลอกแล้วให้ระบุชื่อไฟล์ที่ต้องการคัดลอกมา ประมาณนี้น่ะครับ ไม่ทราบว่ารายละเอียดครบหรือไม่ครับ หากต้องการอะไรเพิ่มบอกได้เลยครับ
ขอบคุณที่สละเวลาอ่าน และช่วยชี้แนะครับ
Re: อยากทราบวิธีสร้าง ปุ่ม VBA เพื่อ คัดลอก รายชื่อจากไฟล์ e
Posted: Fri Jul 01, 2011 10:04 am
by snasui

ส่งตัวอย่างข้อมูลมาดีกว่าครับ อ่านแล้วไม่เคลียร์ครับ ช่วยอธิบายว่าปัจจุบันข้อมูลเป็นอย่างไร ปัญหาคืออะไร และต้องการให้แสดงผลอย่างไร สามารถทำลูกศร ใส่สี ตีเส้น ตามสะดวกเลยครับ
Re: อยากทราบวิธีสร้าง ปุ่ม VBA เพื่อ คัดลอก รายชื่อจากไฟล์ e
Posted: Fri Jul 01, 2011 10:19 am
by kingarthers
แบบ นี้ พอได้มั้ยครับ

Re: อยากทราบวิธีสร้าง ปุ่ม VBA เพื่อ คัดลอก รายชื่อจากไฟล์ e
Posted: Fri Jul 01, 2011 11:01 am
by snasui

ลองเปิดไฟล์ต้นทางและปลายทางขึ้นมาพร้อมกันแล้วทดสอบตัวอย่าง Code ด้านล่างครับ
ใน Code จะต้องปรับตำแหน่งชื่อ Sheet ให้เป็นตามที่ใช้จริง ผมไม่ทราบว่าใช้ชีทชื่อใดก็เลยแทนเป็นชื่อ Sheet1 ไปก่อน
Code: Select all
Sub CopyRange()
Dim rs As Range, rt As Range
With Workbooks("คีย์ค่าแรง V1.xls").Worksheets("Sheet1")
Set rs = .Range("C8:C100")
End With
With Workbooks("คีย์ค่าแรง V1.4.xls").Worksheets("Sheet1")
Set rt = .Range("C8")
End With
rs.Copy
rt.PasteSpecial xlPasteValues
MsgBox "Finish"
End Sub
Re: อยากทราบวิธีสร้าง ปุ่ม VBA เพื่อ คัดลอก รายชื่อจากไฟล์ e
Posted: Fri Jul 01, 2011 11:18 am
by kingarthers
ขอบคุณครับ ตามสูตรนี้สามารถ นำมาประยุก ได้ดีเลยครับ แต่อยากรบกวนถาม มีวิธีแบบ ไม่ต้องเปิดทั้งสองไฟล์ได้หรือไม่ครับ จากตัวอย่าง ถ้าผมเปิดแค่ คีย์ค่าแรง V1.4 จะใช้คำสั่งนี้ไม่ได้ ต้องเปิดสองหน้าไว้คู่กัน
Re: อยากทราบวิธีสร้าง ปุ่ม VBA เพื่อ คัดลอก รายชื่อจากไฟล์ e
Posted: Fri Jul 01, 2011 11:40 am
by snasui
Re: อยากทราบวิธีสร้าง ปุ่ม VBA เพื่อ คัดลอก รายชื่อจากไฟล์ e
Posted: Fri Jul 01, 2011 11:54 am
by kingarthers
ขอบคุณมากครับ พอจะได้แนวทางที่แน่นอนและครับ
ผมลองปรับสูตรนิดหน่อย อยากลองให้อาจารย์ดูว่าโอเคมั้ยครับ เพราะจะได้copy ปุ่มเดียวกันไปไว้ใน sheet อื่นๆ ได้เลยโดยไม่ต้องแก้สูตรใหม่
Code: Select all
Sub Button1_คลิก()
Dim rs As Range, rt As Range
Set rs = Workbooks("คีย์ค่าแรง V1.xls").ActiveSheet.Range("$C$9:$C$29")
Set rt = Workbooks("คีย์ค่าแรง V1.4.xls").ActiveSheet.Range("$C$9:$C$29")
rs.Copy
rt.PasteSpecial xlPasteValues
MsgBox "Finish"
End Sub
Re: อยากทราบวิธีสร้าง ปุ่ม VBA เพื่อ คัดลอก รายชื่อจากไฟล์ e
Posted: Fri Jul 01, 2011 12:03 pm
by snasui
ถ้ามั่นใจว่า ActiveSheet ไม่ถูกเปลี่ยนไปเป็นชีทอื่นและเป็นชีทที่ต้องการใช้งานอยู่เสมอ (กรณีมีหลาย ๆ ชีท) ก็สามารถใช้งานได้ครับ

หากพื้นที่ในการ Copy และวางคงที่ และหากทุกอย่างเหมือนกันหมดยกเว้นค่าในเซลล์ สามารถปรับ Code เป็นตามด้านล่างครับ
Code: Select all
Sub Button1_คลิก()
Workbooks("คีย์ค่าแรง V1.4.xls").ActiveSheet.Range("$C$9:$C$29"). Copy _
Workbooks("คีย์ค่าแรง V1.xls").ActiveSheet.Range("$C$9:$C$29")
MsgBox "Finish"
End Sub
Re: อยากทราบวิธีสร้าง ปุ่ม VBA เพื่อ คัดลอก รายชื่อจากไฟล์ e
Posted: Fri Jul 01, 2011 12:53 pm
by kingarthers
ขอบคุณครับวิธีนี้ดีกว่าอีก
และถ้าสมตติว่า เปิด excel ไว้ทั้งสองไฟล์ แต่พอกดปุ่มแล้ว ให้มีกล่องขึ้นมาเพื่อป้อนชื่อไฟล์ต้นทาง ที่จะ copy เช่นจะ copy จาก ไฟล์ "คีย์ค่าแรง V1.xls" ก็คีย์ คีย์ค่าแรง V1.xls ได้หรือไม่ครับ เพราะจะได้นำไปใช้ได้เรื่อยๆ โดยไม่ต้องแก้สูตรใหม่
Re: อยากทราบวิธีสร้าง ปุ่ม VBA เพื่อ คัดลอก รายชื่อจากไฟล์ e
Posted: Fri Jul 01, 2011 1:02 pm
by snasui

สามารถเพิ่ม Code เข้าไปรับค่าได้ครับ เช่น
Code: Select all
Sub Button1_คลิก()
Dim s As String
s = InputBox("What is source file?")
Workbooks(s).ActiveSheet.Range("$C$9:$C$29"). Copy _
Workbooks("คีย์ค่าแรง V1.xls").ActiveSheet.Range("$C$9:$C$29")
MsgBox "Finish"
End Sub
Re: อยากทราบวิธีสร้าง ปุ่ม VBA เพื่อ คัดลอก รายชื่อจากไฟล์ excel
Posted: Sat May 02, 2015 2:54 pm
by semikolon
Code: Select all
Sub Button1_คลิก()
Dim s As String
s = InputBox("What is source file?")
Workbooks(s).ActiveSheet.Range("$C$9:$C$29"). Copy _
Workbooks("คีย์ค่าแรง V1.xls").ActiveSheet.Range("$C$9:$C$29")
MsgBox "Finish"
End Sub
สวัสดีครับ คือผมสังสัยครับว่า จาก CODE ด้านบนนี้ ถ้าเกิดผมคีย์คำที่ไม่ถูกต้องลง แล้วอยากให้แสดงข้อความว่า "ไม่พบแฟ้มเอกสารนี้" ผมจะต้องเขียนเงื่อนไขอย่างไรครับ รบกวนแนะนำทีนะครับ ขอบคุณครับ
Re: อยากทราบวิธีสร้าง ปุ่ม VBA เพื่อ คัดลอก รายชื่อจากไฟล์ excel
Posted: Sat May 02, 2015 3:51 pm
by snasui

ให้ลองปรับ Code ตามด้านบนมาเองก่อน ติดแล้วค่อยถามกันต่อ
การถามตอบเกียวกับ VBA ต้องเป็นไปตามกฎข้อ 5 ด้านบนครับ
Re: อยากทราบวิธีสร้าง ปุ่ม VBA เพื่อ คัดลอก รายชื่อจากไฟล์ excel
Posted: Mon May 04, 2015 10:43 am
by semikolon
Code: Select all
Dim s As String
s = InputBox("โปรดกรอกปี พ.ศ.ที่ต้องการสั่งซื้อ?","ใบสั่งซื้อปี?", "")
if worksheets(s).select Then
Worksheets(s).Select
else
MsgBox "ไม่พบแฟ้มเอกสาร"
end if
ผมได้ลองพยายามเขียน code นี้เพื่อให้สามารถเลือก sheet ให้ตรงกับค่าที่ป้อนข้อมูลลงไปใน inputbox
แต่เมื่อผมรันcode ดูแล้วมันมีปัญหาครับ คือถ้าเป็นค่าที่ไม่มีชื่อ sheet นัั้นอยู่จริง มันจะ error ครับ
ซึ่งผมไม่ทราบจริงๆว่าจะต้องเขียนเงื่อนไขยังไง ให้ code สามารจตรวจสอบได้ว่ามี sheet ชื่อนั้นๆอยู่หรือไม่
รบกวนแนะแนวทางทีครับว่าต้องใช้ function ไหนช่วยบ้าง ขอบคุณครับ
Re: อยากทราบวิธีสร้าง ปุ่ม VBA เพื่อ คัดลอก รายชื่อจากไฟล์ excel
Posted: Mon May 04, 2015 11:18 am
by snasui

ตัวอย่างการปรับ Code ครับ
Code: Select all
Sub test()
Dim s As String
s = InputBox("โปรดกรอกปี พ.ศ.ที่ต้องการสั่งซื้อ?", "ใบสั่งซื้อปี?", "")
On Error Resume Next
Worksheets(s).Select
If Err <> 0 Then
MsgBox "ไม่พบแฟ้มเอกสาร"
End If
End Sub
Re: อยากทราบวิธีสร้าง ปุ่ม VBA เพื่อ คัดลอก รายชื่อจากไฟล์ excel
Posted: Mon May 04, 2015 1:28 pm
by semikolon
ผมลองนำไปปรับใช้แล้ว ใช้ได้ดีครับ
ขอบคุณมากครับ อาจารย์
Re: อยากทราบวิธีสร้าง ปุ่ม VBA เพื่อ คัดลอก รายชื่อจากไฟล์ excel
Posted: Thu May 07, 2015 1:34 pm
by semikolon
จาก code inputbox ผมมีข้อสงสัยอีกอย่างครับ คือเราสามารถกำหนดคำสั่งให้กับปุ่ม Ok และปุ่ม Cancel ในหน้าต่างกรอกข้อมูลของ inputbox ได้ไหมครับ โดยไม่ต้องใช้ msgbox ช่วยอ่ะครับ
Re: อยากทราบวิธีสร้าง ปุ่ม VBA เพื่อ คัดลอก รายชื่อจากไฟล์ excel
Posted: Thu May 07, 2015 2:31 pm
by snasui