...ส บ า ย ๆ ส ไ ต ล์ มื อ ไ ม่ PRO แ ถ ม ยั ง... LOWFESSIONAL ...

<<
มีนาคม 2551
 1
2345678
9101112131415
16171819202122
23242526272829
3031 
 
7 มีนาคม 2551
 

Excel VBA : โค้ดผิดที่ 4 บรรทัด กับ 2 วันที่ตามหา (ListIndex)


|"ลุงไม้..."|123it.co.nr|เรื่องทั้งหมด|เรื่องที่แล้ว |เรื่องต่อไป|

หยิบยกเอามาบันทึกไว้ เพื่อเตือนตาสอนใจตัวเองครับ...!

เรื่องของเรื่องก็คือ ผมมีภาระกิจต้องสร้าง UserForm ขึ้นมา เพื่ออ่านค่าจากฐานข้อมูล มารอให้พนักงานได้เลือกคลิกไปใช้ เป็นการลดความผิดพลาด จากการพิมพ์ผิดพิมพ์ถูก หน้าตาก็ประมาณนี้ครับ



ใน Userform ที่เห็น จะมี Combobox ซ่อนอยู่อีก 1 ตัวนะครับ(แล้วจะใส่ทำไม?)
ลักษณะการทำงานที่ต้องการก็คือ เมื่อพนักงานเลือกค่าของ No. ค่าของ Code และ Name ก็จะเปลี่ยนตามกันไปในทันที ผมจึงเพิ่มคำสั่งเข้ากับ Combobox แต่ละตัวไว้ดังนี้



ก่อนที่จะแสดงฟอร์มขึ้นมา ก็ต้องมีการสั่งให้ไปอ่านเอาค่าต่างๆมาจากฐานข้อมูลเสียก่อน โดยครั้งแรกเขียนโค้ดขึ้นมาได้ดังนี้ครับ



พอสั่งรันปุ๊บ ฟอร์มก็โชว์ปั๊บ พนักงานก็จะพบกับความว่างเปล่าครับ ต้องเริ่มต้นด้วยการคลิกเข้าไปเลือกรายการสัก 1 ครั้งก่อน ข้อมูลจึงจะแสดงขึ้นใน Combobox แต่ละตัว เพราะนิสัยส่วนตัวของ Combobox ต่างๆ จะแสดงที่รายการ -1 (ก่อนถึงรายการ 1 บรรทัด ก็คือไม่แสดงรายการใดๆ)

ค่านี้ เรียกว่า ListIndex โดยรายการลำดับแรกของข้อมูล จะเริ่มจาก 0 ไป 1 ไป 2 ... ครับ เราสามารถกำหนดค่าเริ่มต้นของ ListIndex นี้ได้ด้วย ส่วนมากมักจะให้เริ่มแสดงรายการแรกรอไว้ ซึ่งต้องกำหนดค่าให้ ListIndex = 0 นั่นเองครับ

ผมก็ไม่อยากให้พนักงานเสียความรู้สึก เพราะเวลาแสดงฟอร์มขึ้นมาแล้วมองไม่เห็นอะไรเลย ผมจึงกำหนด ListIndex = 0 ไว้ในโค้ดด้วย เพื่อให้ฟอร์มแสดงรายการแรกขึ้นมารอเลย คิดได้ก็เขียนโลดเลยครับ



อดที่จะภูมิใจในความเฉลียวฉลาดของตัวเองไม่ได้จริงๆครับ มาทดลองรันฟอร์มกันเลยดีกว่า...



ฮ่าๆ นั่นไงครับ ความสำเร็จของผม

เลยต้องอ้อมแอ้ม ออกตัวกับพนักงานว่า เดี๋ยวขอปรับแต่งให้น่าใช้กว่านี้อีกสักหน่อยก่อนนะ ว่าแล้วก็ Save เข้าแฟลชไดรฟ์ กลับมานั่งงมๆอยู่ที่บ้าน 1 คืน กับที่ทำงานอีก 1 วัน ว่ามันเกิดอะไรขึ้นกันแน่?

มาร้องอ๋อ...เอาเมื่อไม่กี่นาทีก่อนหน้านี้ครับ ผมจะให้ดูโค้ดที่ผมแก้ไขแล้ว (ซึ่งต้องใช้ความสามารถเป็นอย่างสูง คือการย้ายลงมา 4 บรรทัด)



สังเกตที่ผมทำ '+++++ คร่อมเอาไว้นะครับ คราวนี้ได้ผล พอสั่งรันปุ๊บ รายการแรกจึงได้ออกมาแสดงอย่างสง่าผ่าเผยดังนี้



ก็ยิ้มหน้าบานกันไป ทั้งคนสร้างงานและคนสั่งงานครับ (หลายๆคนเรียกผมว่า โปรแกรมเมอร์ตามสั่ง)

ทำไมโค้ดแรกจึงใช้ไม่ได้...?
- เพราะผมไปผูกค่า ListIndex ของ Combobox แต่ละตัวให้เกาะกันไว้ เมื่อตัวหนึ่งถูกเลื่อนรายการ ตัวอื่นๆก็จะเลื่อนไปที่รายการลำดับเดียวกันนั้นด้วย...
- โค้ดบรรทัดแรก Combobox ตัวแรกได้ถูกบรรจุข้อมูลจากฐานข้อมูลเข้าไปแล้ว
- บรรทัดต่อมา ผมก็สามารถสั่ง ListIndex = 0 ได้ทันที ไม่มีปัญหาอะไร
- เมื่อ Combobox ตัวแรกได้รับคำสั่ง ListIndex = 0 ทำให้เกิดการเปลี่ยนแปลง(Change) จากค่ามาตรฐาน คือจาก -1 มาเป็น 0 จึงไปกระตุ้นให้โค้ดอีกชุดหนึ่ง ที่เขียนให้ ListIndex เกาะกันไว้ เริ่มทำงานขึ้นมาทันที
- แต่... ทำงานไม่ได้ครับ และเกิด Error ขึ้น เพราะ Combobox ตัวอื่นๆ ยังไม่ทันมีข้อมูลใดๆเลย ข้อมูลจะถูกบรรจุเข้าไปในบรรทัดถัดลงมา ตอนนี้จึงยังไม่สามารถแสดงรายการบรรทัดแรก ตาม Combobox ตัวแรกได้
สิ่งที่ถูกต้อง
- ก็คือเราต้องบรรจุข้อมูลต่างๆ เข้ากับ Combobox ทุกตัวให้เสร็จสิ้นเสียก่อน แล้วจึงค่อยมาสั่ง ListIndex = 0 ให้กับ Combobox ตัวแรก ในขั้นตอนสุดท้ายก่อนที่จะ Show ทุกๆ Combobox จึงจะสามารถแสดงรายการแรกตามกันได้อย่างถุกต้อง ดังโค้ดที่ได้รับการแก้ไขแล้วนั่นเองครับผม...จำไว้ จำไว้ (อันนี้บอกตัวเอง) เลิกงานพอดี ไปก่อนละครับ สวัสดีครับผม...


Create Date : 07 มีนาคม 2551
Last Update : 29 เมษายน 2551 13:47:28 น. 5 comments
Counter : 4443 Pageviews.  
 
 
 
 
เข้ามางง
 
 

โดย: Jump.Jr วันที่: 26 มีนาคม 2551 เวลา:0:46:19 น.  

 
 
 
ขอบคุณที่แวะมางงครับ ฮ่าๆ

นอกจากดูแลฮาร์ดแวร์แล้ว ผมยังต้องนั่งปั่นซอฟท์แวร์ตามสั่งอีกด้วย ก็เอามาเล่าสู่ชาวเอ็กเซลฟังกันครับ ถือเป็นการแลกเปลี่ยน เพราะผมเองเขียนไปเสิร์จไป ตามประสาภูมิปัญญาชาวบ้าน (วันใหนไม่มีเน็ต งานไม่ค่อยคืบหน้า)
 
 

โดย: mitrapap วันที่: 26 มีนาคม 2551 เวลา:23:26:03 น.  

 
 
 
ถ้าเป็นคนเขียนโปรแกรมอยู่แล้ว น่าจะอ่านเข้าใจนะ
 
 

โดย: มะงัน IP: 58.8.57.56 วันที่: 13 พฤษภาคม 2551 เวลา:13:25:51 น.  

 
 
 
ใครรับเขียน VBA บ้าง จะจ้างเขียน
สนใจติดต่อ ราม 084-0021326
 
 

โดย: ราม IP: 202.44.8.100 วันที่: 18 กรกฎาคม 2551 เวลา:16:06:41 น.  

 
 
 
รบกวนถามหน่อยคะ
คือ ต้องการเอาโค้ดวันที่ มาลงใน textbox เพื่อให้เเสดงวันที่ ซึ่งสามารถแก้ไข และให้วันที่โวเป็นวันที่ปัจจุบัน ซึ่งจำเป็นต้องใช้ เพราะตัว calendar ไม่เจอค่ะ
 
 

โดย: Imean IP: 210.213.7.182 วันที่: 17 มิถุนายน 2553 เวลา:14:11:46 น.  

Name
Opinion
*ใช้ code html ตกแต่งข้อความได้เฉพาะสมาชิก

mitrapap
 
Location :
สระบุรี Thailand

[ดู Profile ทั้งหมด]

ฝากข้อความหลังไมค์
Rss Feed
Smember
ผู้ติดตามบล็อก : 18 คน [?]




Free Domain Names @ .co.nr!
[Add mitrapap's blog to your web]

MY VIP Friend

 
pantip.com pantipmarket.com pantown.com