snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
Forum rules
ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
poipoi
Member
Posts: 164 Joined: Fri May 18, 2012 11:23 am
Contact:
#1
Post
by poipoi » Tue May 14, 2013 3:44 pm
ปัญหามีอยู่ว่า เวลาที่ผมทำการเลือกค่าในช่อง name เพื่อที่จะบันทึกลงในหน้า sheet3 ในคอลั้ม name (Column G) ไม่สามารถบันทึกค่าได้
จะติด bug แต่หากใน row 2 ผมใส่อะไรไปก็ตามแล้ว มันถึงจะเริ่มบันทึก row ที่ 3 ให้
หากว่าผมจะทำการบันทึกต่อ ใน row 4 แต่มันไม่บันทึกให้ จะบันทึกให้แต่ row 3 แทนครับ
ปล. ผมได้แนบไฟล์ พร้อมโค้ด ที่อยู่ในไฟล์ไว้แล้วครับ
ขอบคุณครับ
Attachments
N' Non.xls
(235 KiB) Downloaded 15 times
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#2
Post
by snasui » Tue May 14, 2013 3:51 pm
Code สำหรับการหาบรรทัดทีว่างหลังจากมีข้อมูล ดู
ตัวอย่าง ตามด้านล่างครับ
Code: Select all
blank = Worksheets("sheet3").Cells(65536, 1).End(xlUp).Row + 1
เป็นการให้วิ่งขึ้นไปด้านบนจนพบเซลล์ที่มีข้อมูลก่อนแล้วค่อยลงมา 1 บรรทัดเพื่อหาเซลล์ว่าง
poipoi
Member
Posts: 164 Joined: Fri May 18, 2012 11:23 am
Contact:
#3
Post
by poipoi » Tue May 14, 2013 4:20 pm
ตามที่อาจารย์แก้ไขโค้ดให้สามารถใช้งานได้แล้วครับ
แต่...พอผมกดบันทึกเพิ่มมันก็ไม่สามารถบันทึกต่อจากของเก่าได้ครับ
ขอคำชี้แนะด้วยครับ
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#4
Post
by snasui » Tue May 14, 2013 4:24 pm
แจ้งตัวอย่างข้อมูลที่กรอก และแจ้งมาว่าที่ไม่ได้นั้นติดปัญหาที่บรรทัดใดของ Code ครับ
เราสามารถติดตามการทำงานทีละขั้นของ Code ด้วยการไปที่ Code นั้น ๆ แล้วกดปุ่ม F8 ครับ
poipoi
Member
Posts: 164 Joined: Fri May 18, 2012 11:23 am
Contact:
#5
Post
by poipoi » Tue May 14, 2013 4:35 pm
ผมไม่สามารถกด F8 เพื่อรันสเตบได้ครับเพราะเป็นการกรอกข้อมูลลง UserForm
เมื่อสักครู่นี้ผมได้ทำการแก้ไขโค้ดและเพิ่มโค้ดเข้าไป
ส่วนในหน้าที่ต้องการให้ข้อมูลไปวางไว้นั้นได้ทำการลิ๊งสูตรเพื่อที่จะได้ไม่ต้องกรอก userform หลายครััง
แต่พอลงกรอก userform แล้วมันไม่บันทึกให้ครับ
ส่วนเรื่องโค้ดนี่ไม่ได้ติดตรงไหนครับ
แค่ไม่เข้าใจว่าทำไมจึงไม่สามารถบันทึกลงไปในหน้า data ได้
ผมได้แนบไฟล์ตัวที่อัพเดทสูตรและโค้ดบางส่วนแล้วครับ
ขอบคุณครับ
Attachments
N' Non.xls
(299.5 KiB) Downloaded 29 times
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#6
Post
by snasui » Tue May 14, 2013 5:32 pm
การกด F8 สามารถทำได้กับทุก Procedure ไม่ว่าจะผ่าน Userform หรือไม่ เราสามารถนำ Breakpoint เข้ามาช่วยโดยคลิกในตำแหน่งตามภาพ แล้ว Run Code จากนั้นค่อยกด F8 เพื่อดูทีละ Step หากกดในตำแหน่งตามภาพอีกครั้งจะเป็นการปลด Breakpoint ออกไป
ลองปรับ Code เป็นตามด้านล่าง และที่ชีท Data ให้ลบบรรทัดที่ 1899 ทิ้งไป จากนั้นทดสอบ Run Code ดูใหม่ครับ
Code: Select all
Public Sub entry_mode()
Const name_col = 7
Const date_col = 2
Const cid_col = 5
Const merge_col = 6
Dim blank As Integer
blank = Worksheets("Data").Cells(65536, 2).End(xlUp).Row + 1
With Worksheets("Data")
.Cells(blank, name_col).Value = Entry_form.namelist.Value
.Cells(blank, date_col).Value = Entry_form.day.Value
.Cells(blank, cid_col).Value = Entry_form.cidadd.Value
.Cells(blank, merge_col).Value = Entry_form.mergeadd.Value
End With
MsgBox "Data Record", vbInformation, "Data Record"
End Sub
Attachments
BreakPoint.png (8.56 KiB) Viewed 127 times
poipoi
Member
Posts: 164 Joined: Fri May 18, 2012 11:23 am
Contact:
#7
Post
by poipoi » Tue May 14, 2013 5:42 pm
ใช้การได้แล้วครับ
ผมก็ไม่ได้ทันดูว่าที่บรรทัด 1899 มีค่าอยู่
ขอบคุณสำหรับคำแนะนำครับอาจารย์