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 เตือนแค่ครั้งเดียวแล้ว :D
แต่ว่าพอจะใส่ค่าในช่องเดิมใหม่ คราวนี้ Excel ไม่ขยับ ไม่เปลี่ยนสีในช่อง และไม่มี MsgBox ขึ้นเตือนเลยครับ
เหมือนมันนิ่งไปเลยครับ :?:

Re: สอบถาม code VBA ในการตรวจสอบเงื่อนไขครับ

Posted: Mon Jan 12, 2015 5:22 pm
by DhitiBank
ขออภัยครับ :rz: ผมไม่ได้ดูว่ามีโค้ด 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 ออกทุกตำแหน่งแล้ว ปรากฎว่าสามารถรันโปรแกรมได้แล้ว
ขอบคุณอีกครั้งครับและขอโทษที่ตอบช้าครับ