Page 1 of 1
สอบถาม code VBA ในการตรวจสอบเงื่อนไขครับ
Posted: Mon Jan 12, 2015 11:48 am
by iKriTz
รบกวนสอบถามครับ
ผมได้ทำไฟล์การตรวจวัดขนาดของชิ้นงาน online ซึ่งใส่ค่า (ช่อง K7) แล้วก็จะคำนวณกับ Spec (ช่อง K6 และ P6) เพื่อดูว่าค่าที่วัดได้อยู่ในช่วงหรือไม่โดย
1. อยู่ในช่วงจะเปลี่ยนพื้นหลังในช่อง K7 เป็นสีเขียว
2. อยู่ในช่วงแต่ค่าใกล้กับค่าสูงสุดหรือต่ำสุดจะแสดงสีเหลืองและมี MsgBox แจ้งเตือน
3. ค่าออกนอก Spec จะแสดงสีแดงและมี MsgBox แจ้งเตือน
และบันทึกเวลาการวัดในช่อง BL7 โดยผมเขียนสูตรไว้ใน sheet Scroll เป็นแบบ Workseet_Change ใน VBA โดยใช้ If else ทีนี้ผมลองใช้งานดูและสงสัยว่า
1. เวลาใส่ค่าแล้วหน้าจอมันกระพริบเหมือนมีการคำนวณหลายรอบ
2. เมื่อเข้าเงื่อนไขข้อ 2 หรือ 3 ตัว MsgBox ที่แจ้งเตือนจะขึ้นมาแล้ว เมื่อกด OK มันก็จะขึ้นมาอีก ต้องกดไปเกือบ 100 รอบได้ถึงจะหายไป
รบกวนช่วยตรวจสอบ code ในไฟล์ที่แนบด้วยครับ
ขอบคุณครับ
ปล. ไฟล์ผม set ให้ กด enter แล้ว cursor เลื่อนไปทางขวาครับและเปิดด้วย excel 2007 ครับ
Re: สอบถาม code VBA ในการตรวจสอบเงื่อนไขครับ
Posted: Mon Jan 12, 2015 2:46 pm
by DhitiBank
ลองใส่คำสั่งนี้เข้าไป น่าจะช่วยได้ครับ
Code: Select all
Private sub .........
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
Your Code....
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
คำสั่ง
Application.EnableEvents เป็นประโยชน์มากเวลาเขียนโค้ดที่ให้รันทันทีเวลาเปลี่ยนแปลงค่าในเซลล์ครับ เพื่อป้องกันไม่ให้รันโค้ดประเภท event เช่น worksheet_change ฯลฯ ซ้ำซ้อนกันระหว่างที่โค้ดปัจจุบันกำลังทำงานอยู่ครับ
Re: สอบถาม code VBA ในการตรวจสอบเงื่อนไขครับ
Posted: Mon Jan 12, 2015 4:50 pm
by iKriTz
DhitiBank wrote:ลองใส่คำสั่งนี้เข้าไป น่าจะช่วยได้ครับ
Code: Select all
Private sub .........
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
Your Code....
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
คำสั่ง
Application.EnableEvents เป็นประโยชน์มากเวลาเขียนโค้ดที่ให้รันทันทีเวลาเปลี่ยนแปลงค่าในเซลล์ครับ เพื่อป้องกันไม่ให้รันโค้ดประเภท event เช่น worksheet_change ฯลฯ ซ้ำซ้อนกันระหว่างที่โค้ดปัจจุบันกำลังทำงานอยู่ครับ
ขอบคุณ คุณ DhitiBank มากครับ
ผมได้ลองนำไปไว้ต่อจาก Private Sub ... และก่อน End Sub ตามที่แนะนำมาแล้วครับ
โปรแกรมไม่มีการกระพริบแล้ว และ MsgBox เตือนแค่ครั้งเดียวแล้ว
แต่ว่าพอจะใส่ค่าในช่องเดิมใหม่ คราวนี้ Excel ไม่ขยับ ไม่เปลี่ยนสีในช่อง และไม่มี MsgBox ขึ้นเตือนเลยครับ
เหมือนมันนิ่งไปเลยครับ

Re: สอบถาม code VBA ในการตรวจสอบเงื่อนไขครับ
Posted: Mon Jan 12, 2015 5:22 pm
by DhitiBank
ขออภัยครับ

ผมไม่ได้ดูว่ามีโค้ด
Exit Sub อยู่ด้วย
คุณต้องนำโค้ด
Code: Select all
With Application
.EnableEvents=True
.ScreenUpdating=True
End With
ไปใส่ในบรรทัดก่อนโค้ด
Exit Sub ทุกตำแหน่งครับ
Re: สอบถาม code VBA ในการตรวจสอบเงื่อนไขครับ
Posted: Mon Jan 12, 2015 5:32 pm
by DhitiBank
สำหรับการแก้ปัญหาให้มีการ EnableEvent อีกครั้ง รบกวนคุณแทรก module ใหม่ขึ้นมา 1 module แล้วเขียนโค้ด
Code: Select all
Public sub Act_event()
Application.EnableEvents=True
End Sub
จากนั้นกดปุ่ม F8 เพื่อให้โค้ดรันจนจบ คราวนี้หากคุณแทรกโค้ดก่อน Exit Sub ตามโพสต์ด้านบนเสร็จแล้ว เมื่อคุณคีย์เลขและกดปุ่ม TAB ผลก็จะเป็นไปตามที่ต้องการครับ
ปล. วิธีสั่งให้ Events ถูกเปิดใช้งานอีกครั้ง ผมทราบแค่วิธีนี้ ไม่แน่ใจว่าจะทำวิธีอื่นได้อีกหรือเปล่า
Re: สอบถาม code VBA ในการตรวจสอบเงื่อนไขครับ
Posted: Wed Jan 14, 2015 2:35 pm
by iKriTz
อ่อ เป็นที่ Exit Sub นั่นเอง
ขอบคุณครับ คุณ DhitiBank
แต่จริงๆแล้วที่ผมใส่ Exit Sub แทรกไว้เพราะคิดว่ามันน่าจะทำให้ MsgBox ขึ้นเตือนเพียงครั้งเดียว
ทีนี้ผมเลยลองเอา Exit Sub ออกทุกตำแหน่งแล้ว ปรากฎว่าสามารถรันโปรแกรมได้แล้ว
ขอบคุณอีกครั้งครับและขอโทษที่ตอบช้าครับ