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

<<
พฤษภาคม 2552
 12
3456789
10111213141516
17181920212223
24252627282930
31 
 
22 พฤษภาคม 2552
 

วินโดวส์ เอ็กเซล vba เกร็ด(เก็บ)เล็กผสมน้อย


[รวมเรื่องที่ผ่านมา]

ช่วงนี้ห่างบล็อกตัวเองไปนาน เพราะกิจการงานบริษัทที่ทำขยายขนาดอย่างเร็ว งานที่เคยให้พนักงานขีดๆเขียนๆพิมพ์ๆ ก็เลยมีอันต้อง(รับหน้าที่)หาทางให้เป็นระบบอัตโนมัติมากที่สุด วันๆก็เลยมักจมอยู่กับ if...then...else... จนแทบหน้ามืดตาลาย บางทีก็เกิดอาการตื้อๆไปซะเฉยๆ

Return Procudure Name
วันนี้เขียนโค้ด VBA อยู่ ผมมีเรื่องต้องรันเกี่ยวกับการตรวจสอบสิทธิ์บางอย่าง ก็ไปวางแผนเอาไว้ว่า จะเอาชื่อ Procudure ตัวนี้ ไปตรวจสอบชื่อในอีกตัวหนึ่ง ก็เลยลอง Search ในอินเตอร์เน็ต ด้วยคำว่า how to return procudure name ได้มาหลายหน้าเหมือนกัน แต่ออกในแนวลึกๆ(เกินภูมิปัญญาชาวบ้านแบบผมไปเยอะ)

ลองไปลองมาหลายวิธี พักเที่ยงออกไปกินก๋วยเตี๋ยวข้างที่ทำงาน โค้ดยังติดหัวไปร้านก๋วยเตี๋ยวด้วย เพราะงานออกมายังยุ่งเหยิงอยู่ แล้วแว่บหนึ่งก็คิดขึ้นได้ แทบจะละชามก๋วยเตี๋ยวมาเดี๋ยวนั้นเลย

แทนที่จะไปค้นหาคำสั่งอะไรมาคืนค่าเป็นชื่อของ Procudure ที่กำลังรัน มัวแต่ไปคิดลึกเกินเหตุ สามารถทำได้ง่ายๆแค่นี้เอง

Dim ProcudureNow As String 'ประกาศตัวแปรนี้ไว้บนหัว Module

'คำสั่งอันที่ 1
Sub TestCommand01()
ProcudureNow="TestCommand01"
.....
.....
End Sub


'คำสั่งอันที่ 2
Sub TestCommand02()
ProcudureNow="TestCommand02"
.....
.....
End Sub


'คำสั่งที่ใช้ตรวจสอบว่า Procudure ตัวใหนกำลังทำงาน
Sub CheckProcudureName()
if ProcudureNow="TestCommand01" then
.....
.....
elseif ProcudureNow="TestCommand02" then
.....
.....
End if
End Sub


แค่นี้ก็ได้แล้ว เฮ้อ...ปวดหัวไปซะครึ่งวัน


ลอยไปก็ลอยมา "this computer is being attacked"
น้องคนหนึ่งที่รู้จักกันนำเครื่องคอมมาให้ทำ บอกว่าทำงานอะไรไม่ได้เลย สงสัยอาการจะหนัก
- อันดับแรกเจอหน้า Log on ด้วยชื่อภาษาอังกฤษมั่วๆ ไม่รู้ password อีกต่างหาก ต้องคว้าแผ่น Hiren คู่กายมา Reset Password จึงผ่านเข้าไปได้
- "This computer is being attacked" ลอยไปก็ลอยมา ทำอะไรไม่ได้เลย กด Ctrl+Alt+Del ก็ไม่ได้ หาทางหยุดอย่างไรก็ไม่ได้
- เปิด msconfig มาไล่เอาเครื่องหมายออกจากชื่อแปลกๆ เมื่อลองบูตใหม่ เจ้าตัวนี้ไม่ได้หายไปง่ายๆ แม้แต่ใน safemode มันก็ยังตามไปลอยอยู่อย่างนั้น
- ติดตั้ง Avast ในโหมดนี้เลย ติดตั้งเสร็จก็เลือกให้สแกนเครื่องก่อนเข้าวินโดวส์ ผลคือสแกนได้เพียบ
- กลับเข้าวินโดวส์คราวนี้ ไม่มีอะไรลอยไปลอยมาแล้ว แต่เครื่องยังแปลกๆ เช่น ดับเบิ้ลคลิกเปิด Word หรือ Excel ไม่ได้ จะเปิด MediaPlayer ก็ไม่ได้ (บอกว่าไม่ใช่ Admin ทั้งๆที่ตรวจดูแล้วก็ใช่)
- ไปที่นี่เลย //www.regsofts.com/free_registry_repair/registry_repair.htm ได้มาก็ติดตั้ง แล้วรัน พบความผิดพลาดมากมาย ก็ Fix ไปตามนั้น
- จบข่าว พรุ่งนี้ส่งเครื่อง(แล้วรับตังค์)


ซ่อมคอมได้ 300 ติดแท้งค์ปริ๊นเตอร์เสีย 600
แถวๆบ้านจะรู้กันดีว่าผมชอบทำแท้งค์ ก็ทำมานับสิบเครื่องละ เมื่อประมาณกลางปี 51 ทำให้ CANON IP1200 ของน้องเขยไปตัวนึง ชอบอกชอบใจ พาหลานมาช่วยพิมพ์กัน 3 บ้าน หมึกยังไม่หมดแท้งค์สักที

หลานอีกคนอยากได้บ้าง ยกรุ่นเดียวกันนี่มาเลย ประมาณปลายๆมีนาคม 2552 ที่ผ่านมา ก่อนจะทำแท้งค์ก็ต้องทดสอบเครื่องกันหน่อย ปรากฏว่าสามารถใส่ตลับเบอร์ 40 และ 41 ที่มากับเครื่องได้ แต่สี น้ำเงิน ไม่ออก

สีดำพิมพ์ได้ แดงและเหลืองก็ได้ แต่น้ำเงินเงียบสนิท แปลกที่เอาทิชชู่ซับที่หัวพิมพ์ กลับออกมาครบทั้ง แดง+เหลือง+น้ำเงิน

เสิร์จดูในเน็ตเพื่อหาข้อมูลเพิ่มเติม พบว่า ตลับ CANON #41 นี้ มักเสียที่สีน้ำงินกันถ้วนหน้า ผมเลยฟันธงตามเขาไปว่า ตลับที่มากับเครื่องคงเสียไปแล้ว

ก็ไม่อยากให้หลานเปลืองเงินโดยใช่เหตุ จึงให้รอสักหน่อย จะหาถามตลับเก่าตามเพื่อนๆให้ ก็ได้มาลอง 3 ตลับ เอามาใส่เครื่องแล้ว ไฟกระพริบ ส้ม 7 เขียว 1 บ้าง, ส้ม 5 เขียว 1 บ้าง สรุปว่า ไม่ได้สักตลับ

หลานก็รอมาจนปลายพฤษภาคมนี่แล้ว ผมเลยตัดใจซื้อตลับแท้มาเลย ราคา 600 กว่าบาท ใหม่กิ๊กแกะกล่องลองกันเลย

เหงื่อตกครับ...เครื่องปริ๊นท์วางไว้นิ่งๆประมาณ 20 วัน ไม่รับหมึกทั้งดำทั้งสี ตลับใหนๆใส่ไปก็กระพริบตลอด รวมทั้งตลับใหม่กิ๊กนี่ด้วย...

จะบอกหลานตรงๆ หลานคงมีเคือง ก็เครื่องเขามา 80% วางไว้เฉยๆ วันนี้ใช้ไม่ได้ 100% ไม่รู้ว่าจะโทษเครื่องหรือโทษตลับ เพราะยิ่งลองจะยิ่งบานปลาย

ตัดสินใจ...ผมจะจ่ายค่าหมึกตลับนี้เอง แถมจะยก HP3550 + ติดแท้งค์เรียบร้อย ให้ไปใช้ฟรีๆเลย (เครื่องนี้มีวางกองอยู่ 2 ตัว เทสแล้วใช้ได้ชัวร์)

ยังดีว่ามีงานคอมเข้ามาอีกเครื่องนึง ซ่อมคอม 2 เครื่อง ได้ค่าหมึกพอดี ง่วงนอนฟรีไป 2 คืน แถมเสียปริ๊นเตอร์อีก 1 ตัว...เฮ้อ


เปลี่ยนวิธี Return Procudure Name ซะแล้ว
จากโค้ดข้างบน ผมไม่ต้องประกาศตัวแปร Dim ProcudureNow As String นี้ไว้บนหัว Module กันแล้ว เพราะหันมา Function เป็นตัวช่วยตรวจสอบ พร้อมๆกับอ้างชื่อได้ในขณะทำงานเลย รูปแบบเป็นดั่งนี้

'คำสั่งอันที่ 1
Sub TestCommand01()
CheckProcudureName "TestCommand01" 'ระบุชื่อไปพร้อมๆกับการเรียกใช้ฟังก์ชั่น
.....
.....
End Sub


'คำสั่งอันที่ 2
Sub TestCommand02()
CheckProcudureName "TestCommand02"
.....
.....
End Sub


'คำสั่งที่ใช้ตรวจสอบว่า Procudure ตัวใหนกำลังทำงาน
Function CheckProcudureName(ProcudureNow As String)
if ProcudureNow="TestCommand01" then
.....
.....
elseif ProcudureNow="TestCommand02" then
.....
.....
End if
End Sub


ก็สามารถใช้งานได้ดีตามจุดประสงค์ เวลาไล่โค้ดกลับมาจะได้ไม่งงตัวเองครับ

โดยส่วนตัวแล้ว เริ่มรู้สึกว่า การใช้ Function ร่วมกับ Sub ทำให้เกิดความยืดหยุ่นมากขึ้น ลดการต้องประกาศตัวแปรไปได้โขอยู่ครับผม



Create Date : 22 พฤษภาคม 2552
Last Update : 3 มิถุนายน 2552 14:14:51 น. 3 comments
Counter : 2180 Pageviews.  
 
 
 
 
เยี่ยมครับ...
 
 

โดย: แดนน้อย วันที่: 23 พฤษภาคม 2552 เวลา:22:08:53 น.  

 
 
 
จะลองนำไปใช้ครับ
 
 

โดย: lucas (LucasLeva ) วันที่: 12 มีนาคม 2553 เวลา:21:08:32 น.  

 
 
 
ตลับ canon 41 สีน้ำเงินไม่ออกเหมือนกันค่ะ
เป็นตลับจริงที่เติมหมึกเทียมมาปีกว่าแล้ว
คงได้เสียเงินซื้อตลับใหม่แน่

ว่าแต่ตลับเก่าที่สีน้ำเงินไม่ออกจะขายได้ไหมนะ...
 
 

โดย: :) IP: 125.24.105.89 วันที่: 13 มีนาคม 2553 เวลา:23:02:03 น.  

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