Page 1 of 1
โค้ดบันทึกข้อมูล
Posted: Wed Oct 17, 2012 10:51 pm
by tutape
ผมลองบันทึกโค้ดในการบันทึกข้อมูลใน excel คือ ข้อมูล จากชีท "InputData" เมื่อคลิ๊กที่บันทึกข้อมูล ข้อมูลจะไปปรากฎในชีท "Alldata" แล้วข้อมูลในชีทก็จะถูกลบไป โดยโค้ดที่ผมได้เป็นดังนี้
Code: Select all
Sub copy()
Range("B4:I13").Select
Selection.copy
Sheets("AllData").Select
Range("B4:i13").Select
ActiveSheet.Paste
Sheets("InputData").Select
Range("B4:I13").Select
Application.CutCopyMode = False
Selection.ClearContents
Range("B4").Select
End Sub
แต่ปัญหาอยู่ที่ว่า พอข้อมูลในชีท "InputData" ถูกลบไปแล้ว เมื่อคีย์ข้อมูลใหม่เข้าไป แล้วเมื่อกดปุม "บันทึกข้อมูล" จะให้ข้อมูลไปต่อท้ายข้อมูลเก่าที่บันทึกไปแล้วในชีท "AllData" จะใช้โค้ดว่าอะไร เลยงง รบกวน อ. และเพื่อนในกลุ่มช่วยแนะนำด้วยครับ
Re: โค้ดบันทึกข้อมูล
Posted: Wed Oct 17, 2012 11:08 pm
by snasui

ลองปรับ Code เป็นตามด้านล่างครับ
Code: Select all
Sub copy()
Range("B4:I13").Select
Selection.copy
Sheets("AllData").Select
Range("B" & Rows.Count).End(xlUp).Offset(1,0).Select
ActiveSheet.Paste
Sheets("InputData").Select
Range("B4:I13").Select
Application.CutCopyMode = False
Selection.ClearContents
Range("B4").Select
End Sub
Re: โค้ดบันทึกข้อมูล
Posted: Wed Oct 17, 2012 11:15 pm
by tutape
ขอบคุณครับ
แก้ไขรหัสให้กระชับและทำงานได้รวดเร็ว
Posted: Thu Oct 18, 2012 12:55 am
by nattasiray
เนื่องจากรหัสที่ได้จากการบันทึกแมโคร มักจะมีรหัสขยะปะปนออกมาด้วย ดังนั้นจากรหัสที่คุณได้มา สามารถย่นย่อได้เลือกดังนี้
Code: Select all
Sub CopyAndPaste()
Sheets("InputData").Range("B4:I13").copy Sheets("AllData").Range("B" & Rows.Count).End(xlUp).Offset(1,0)
application.goto Reference:=Sheets("InputData").Range("B4:I13")
Selection.ClearContents
Range("B4").Select
End Sub
เสริ่มเรื่องการตั้งชื่อแมโคร
ห้ามใช้คำสงวน เช่น Cut Copy Delete เป็นต้น ในการตั้งชื่อแมโคร เพราะคำดังกล่าวเป็นคำสั่งครับ ควรใช้คำอื่นเข้าร่วมด้วย
จากโค้ดข้างบน ผมจะใช้สูตร OFFSET ร่วมกับ Range name ในรับส่งค่า แทนการคัดลอกแล้ววางครับ
ในแฟ้ม ให้เข้าไปดูว่าโมคูลใดที่ไม่ใช้ ให้ลบทิ้งเพื่อลดขนาดของแฟ้มครับ
Re: แก้ไขรหัสให้กระชับและทำงานได้รวดเร็ว
Posted: Thu Oct 18, 2012 1:21 am
by nattasiray
nattasiray wrote:เนื่องจากรหัสที่ได้จากการบันทึกแมโคร มักจะมีรหัสขยะปะปนออกมาด้วย ดังนั้นจากรหัสที่คุณได้มา สามารถย่นย่อได้เลือกดังนี้
Code: Select all
Sub CopyAndPaste()
Sheets("InputData").Range("B4:I13").copy Sheets("AllData").Range("B" & Rows.Count).End(xlUp).Offset(1,0)
application.goto Reference:=Sheets("InputData").Range("B4:I13")
Selection.ClearContents
Range("B4").Select
End Sub
เสริ่มเรื่องการตั้งชื่อแมโคร
ห้ามใช้คำสงวน เช่น Cut Copy Delete เป็นต้น ในการตั้งชื่อแมโคร เพราะคำดังกล่าวเป็นคำสั่งครับ ควรใช้คำอื่นเข้าร่วมด้วย
จากโค้ดข้างบน ผมจะใช้สูตร OFFSET ร่วมกับ Range name ในรับส่งค่า แทนการคัดลอกแล้ววางครับ
ในแฟ้ม ให้เข้าไปดูว่าโมคูลใดที่ไม่ใช้ ให้ลบทิ้งเพื่อลดขนาดของแฟ้มครับ
ใช้ Hyperlink กระโดดไปยังจุดหมายปลายทางที่ต้องการ
Posted: Thu Oct 18, 2012 1:23 am
by nattasiray
ในบางครั้งเราต้องการเข้าถึงเซลล์ปลายที่ต้องการ ไม่ต้องใช้ VBA ครับ ใช้ Hyperlink ทดแทนได้ ซึ่งสะดวกต่อการแก้ไข โดยมีขั้นตอนการทำดังนี้
คลิกขวาที่ขอบรูปวาด คลิกเลือก Hyperlink...
ที่กรอบ Link to: เลือก Place in This Document
กำหนดที่ช่อง Type the cell Reference ด้วยเซลล์ที่ต้องการเข้าถึง
ที่กรอบ or select place in this document คลิกเลือกเวิร์คชีตของเซลล์ที่ต้องการไป
Re: โค้ดบันทึกข้อมูล
Posted: Thu Oct 18, 2012 9:19 am
by snasui
nattasiray wrote:ห้ามใช้คำสงวน เช่น Cut Copy Delete เป็นต้น ในการตั้งชื่อแมโคร เพราะคำดังกล่าวเป็นคำสั่งครับ ควรใช้คำอื่นเข้าร่วมด้วย
คำสงวนของ VB, VBA สามารถดูได้ที่นี่ครับ
Reserved Keywords