Page 1 of 1

Code error เมื่อข้อมูลน้อย

Posted: Mon Feb 12, 2018 10:27 am
by eyepop99
อ้างอิง ไฟล์จากเว๊ป
http://www.onlinepclearning.com/excel-r ... ng-system/

เป็นไฟล์สำหรับ booking ห้องพักครับ
ไฟล์ที่ ทำสำเร็จแล้ว ใช้งานได้ดีทุกฟังชั่นครับ

**ปัญหาคือ ฟังชั่นedit
ถ้าข้อมูลในการแก้ไข จะมีฟังชั่นหา ROW ที่ต้องการจะแก้ไขอยู่ครับ
ถ้าข้อมูล จากการทดสอบ ( ข้อมูลที่มี 20++ Row ) ฟังชั่นทำงานได้ปรกติ ครับ
แต่ถ้าข้อมูลมีน้อย (5-10 Row) ฟังชั่น edit จะ error ครับ

จากการ debug ตรวจสอบพบว่า มีปัญหาที่ Code นี้ครับ
ส่วนตัวตอนนี้ ผมปรับแก้ Code โดยใช้ Do + if มาเป็นการค้นหาแทนครับ สามารถใช้งานแทนได้ครับ
แค่เพียงอยากทราบว่า ทำไมcode ถึงerror เพื่อจะได้ปรับใช้ในส่วนอื่นๆ ต่อไปครับ

**code หา rowที่มี id ตรงกัน ซึ่งเมื่อข้อมูลน้อยจะเกิดปัญหา 2 กรณี เท่าที่ผมพบ
1. คืนค่า = 5 (ซึ่งผิด)
2. คืนค่า = 0 (เหมือนค้นหาข้อมูลไม่พบแต่ความเป็นจริงข้อมูลนั้นมีครับ)

ไฟล์ตัวอย่าง Original (ข้อมูลเยอะไม่error)
ไฟล์ Lessdata (ข้อมูลน้อย Error)

Code: Select all

Other code....

 editBookingInRow = Fws.Range("B9:B" & lastrow).Find(What:=ID, LookIn:=xlValues, _
                LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                MatchCase:=False, SearchFormat:=False).Row
                
Other code...                

Re: Code error เมื่อข้อมูลน้อย

Posted: Mon Feb 12, 2018 10:52 am
by eyepop99
จากที่ผมลอง ตรวจสอบนะครับ
Range ข้อมูล 10 ตัว
จะหาข้อมูลได้เพียง 2 ตัวแรกพอค้นหาตัวที่ 3 จะ Error
ถ้า Range ข้อมูล 20 ตัว
จะหาข้อมูลได้ถึง 12 ตัว หลังจากนั้นจะ Error

ผมเลยลอง ยืด Range โดยการบวก Range ช่วงค้นหา เข้าไปอีก 8
เช่น ข้อมูล A1:A9 ผมจะทำการบวกไปอีก 8 = A1:A17
ผลคือ สามารถ ค้นหาข้อมูลได้ทั้งหมด ตั้งแต่ A1:A9 โดยไม่เกิดข้อมผิดพลาดครับ

Re: Code error เมื่อข้อมูลน้อย

Posted: Mon Feb 12, 2018 11:26 am
by logic
คิดว่าเป็นที่ตัวแปร lastrow ครับ :P

เดิม lastrow = Fws.Cells(Rows.Count, "B").End(xlUp) เปลี่ยนเป็น lastrow = Fws.Cells(Rows.Count, "B").End(xlUp).Row ดูครับ

Re: Code error เมื่อข้อมูลน้อย

Posted: Wed Feb 14, 2018 9:45 am
by eyepop99
logic wrote: Mon Feb 12, 2018 11:26 am คิดว่าเป็นที่ตัวแปร lastrow ครับ :P

เดิม lastrow = Fws.Cells(Rows.Count, "B").End(xlUp) เปลี่ยนเป็น lastrow = Fws.Cells(Rows.Count, "B").End(xlUp).Row ดูครับ
ลองปรับcode ตามนี้ได้แล้วครับ ขอบคุณครับ