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
:D ลองปรับ 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
:D
nattasiray wrote:ห้ามใช้คำสงวน เช่น Cut Copy Delete เป็นต้น ในการตั้งชื่อแมโคร เพราะคำดังกล่าวเป็นคำสั่งครับ ควรใช้คำอื่นเข้าร่วมด้วย
คำสงวนของ VB, VBA สามารถดูได้ที่นี่ครับ Reserved Keywords