Page 1 of 1

การบังคับให้ USER ใส่ข้อมูล

Posted: Thu Jun 02, 2011 8:04 pm
by Panuwat
เรียนที่อาจารย์ ผมได้แนบไฟล์ปัญหามาให้ท่านอาจารย์ช่วยแก้ไข เพื่อจะนำไปใช้ประโยช์ในหน่วยงานครับ
Sheet 1 ต้องการให้ User ต้องใส่ข้อมูลทั้งหมดของพนักงานคนนั้นๆ (ถ้าใส่ข้อมูลแรกของพนักงานคนนั้นต้องใส่ให้หมด ถ้าลืมใส่ ให้มี Message แจ้งเตือน
Sheet 2 มีข้อมูล "ควรปรับปรุง" "พอใช้" "ดี" "ดีมาก" "ดีเยี่ยม" ถ้า User คีย์ ดีเยี่ยม ให้ขึ้น User form ให้กรอกข้อมูล และกด OK ข้อมูลเหตุผล จะถูกนำไปลงใน Cell ที่ต้องการ


ขอแสดงความนับถือ

Re: การบังคับให้ USER ใส่ข้อมูล

Posted: Thu Jun 02, 2011 9:07 pm
by snasui
:D คุณ Panuwat ลืมแนบ Code หรือเปล่าครับ ช่วยเขียน Code มาเองก่อนครับ ถ้าจะใช้ Userform ก็ต้องเพิ่มมาให้ด้วย ติดขัดตรงไหนก็ค่อยมาช่วยกันดูต่อครับ

Re: การบังคับให้ USER ใส่ข้อมูล

Posted: Sat Jun 04, 2011 9:08 am
by Panuwat
เรียนท่านอาจารย์
ตามข้อ 2. ผมได้ทำ Code มาให้ แต่ยังเกิด ERROR อยู่ครับ รบกวนท่านอาจารย์ช่วยดูให้ด้วยครับ
ส่วนข้อ 1. ทำไม่ได้จริงๆ ครับ


ขอแสดงความนับถือ

Re: การบังคับให้ USER ใส่ข้อมูล

Posted: Sat Jun 04, 2011 11:15 am
by snasui
:D ในชีทบังคับให้คีย์ทุกอัน มีลำดับขั้นตอนการทำงานอย่างไรครับ การจะให้โปรแกรมเช็คได้จะต้องบอกโปรแกรมด้วยว่าเมื่อผู้ใช้ทำอย่างไรโปรแกรมถึงจะเช็ค เช่นเมื่อคีย์บรรทัดใหม่, เมื่อ Save, เมื่อเลือกชีทอื่น เมื่อปิด เช่นนี้เป็นต้น

ส่วนข้อ 2. ผมเขียนตัวอย่าง Code มาให้ตามด้านล่างครับ

1. ที่ Sheet2

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("n5:q16")) Is Nothing Then
    FillCause
End If
End Sub
2. ที่ Module ปกติ

Code: Select all

Sub FillCause()
Application.EnableEvents = False
If ActiveCell = "ดีเยี่ยม" Then
ActiveCell.Offset(0, IIf(ActiveCell.Column = 14, 6, 5)) _
    = InputBox(prompt:="ระบุเหตุผล :", _
    Title:="เหตุผล")
End If
Application.EnableEvents = True
End Sub

Re: การบังคับให้ USER ใส่ข้อมูล

Posted: Sat Jun 04, 2011 3:21 pm
by Panuwat
เรียนท่านอาจารย์ครับ
ตามชีต Sheet 1 ผมต้องการให้เช็คเมื่อมีการคีย์บรรทัดใหม่ครับ เพราะถ้าเป็นการเช็คกรณีอื่นๆ แล้ว จะต้องมีการเตือนว่า การขาดหายของข้อมูล อยู่ในลำดับที่เท่าไหร่ ครับ
ส่วน Sheet 2 ผมขอความกรุณาอาจารย์ช่วยอธิบายให้ผมหน่อยครับ ว่า ในโค้ดตรงส่วนไหน ที่เมื่อคีย์ข้อความใน Message BOX แล้ว ข้อความใน Message BOX จะส่ง"เหตุผล" ลงไปใน Cell ต้องการ (ที่ระบุว่า ลงใน Cell ไหน ครับ เช่นในตัวอย่าง ดีเยี่ยมใน Cell N5 เหตุผลจะลงใน Cell U5 ครับ)

ขอแสดงความนับถือ

Re: การบังคับให้ USER ใส่ข้อมูล

Posted: Sat Jun 04, 2011 3:48 pm
by snasui
:D สำหรับการทำข้อความเตือนผมตรวจสอบใน Validation พบว่ามีการเขียนมาบ้างแล้ว ลักษณะการเตือนว่าคีย์ให้ครบก็สามารถเพิ่มเติมเข้าไปจากเดิมโดยใช้ And เพื่อจะทำเป็นหลายเงื่อนไขได้ครับ

สำหรับเงื่อนไขที่จะตรวจสอบว่าบรรทัดบนต้องไม่ว่างสามารถทำดังนี้ครับ

1. คลุม B3:G21
2. เข้าเมนู Data > Validation > ตรง Allow เลือก Custom > ตรง Formula: คีย์
=COUNTA(OFFSET($B3,-1,0,1,5))=6

กรณีต้องการใช้หลายเงื่อนไข ตรง Formula สามารถใช้ And เข้ามาช่วยเป็น

=And(Formula1,COUNTA(OFFSET($B3,-1,0,1,5))=6,Formula3,...)

จากตัวอย่างสูตรด้านบนจะเห็นว่าเงื่อนไขของการตรวจสอบว่าคีย์ครบหรือไม่ครบอยู่ในเงื่อนไขตัวที่สอง

กรณี Code การส่งค่าใน InputBox ไปบันทึกยังตำแหน่งที่ต้องการจาก Code ด้านล่าง

Code: Select all

ActiveCell.Offset(0, IIf(ActiveCell.Column = 14, 6, 5)) _
    = InputBox(prompt:="ระบุเหตุผล :", _
    Title:="เหตุผล")
ActiveCell คือเซลล์ปัจจุบัน
ActiveCell.Column คือคอลัมน์ของเซลล์ปัจจุบัน
ActiveCell.Offset(x,y) คือตำแหน่งเซลล์ใหม่ที่ถัดจากเซลล์ปัจจุบันไปจำนวน x บรรทัด y คอลัมน์
IIf(ActiveCell.Column = 14, 6, 5) หมายความว่า ถ้าเซลล์ปัจจุบันอยู่ในคอลัมน์ที่ 14 ก็ให้แสดงผลลัพธ์เป็น 6 ไม่เช่นนั้นก็ให้แสดงผลลัพธ์เป็น 5

Re: การบังคับให้ USER ใส่ข้อมูล

Posted: Sat Jun 04, 2011 8:14 pm
by Panuwat
ขอบพระคุณท่านอาจารย์มากครับ