:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

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

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
iKriTz
Member
Member
Posts: 3
Joined: Mon Jan 12, 2015 11:13 am

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

#1

Post 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 ครับ
Attachments
INSPECTION RECORD.xlsm
(226.28 KiB) Downloaded 29 times
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

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

#2

Post 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 ฯลฯ ซ้ำซ้อนกันระหว่างที่โค้ดปัจจุบันกำลังทำงานอยู่ครับ
iKriTz
Member
Member
Posts: 3
Joined: Mon Jan 12, 2015 11:13 am

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

#3

Post 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 ขึ้นเตือนเลยครับ
เหมือนมันนิ่งไปเลยครับ :?:
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

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

#4

Post by DhitiBank »

ขออภัยครับ :rz: ผมไม่ได้ดูว่ามีโค้ด Exit Sub อยู่ด้วย

คุณต้องนำโค้ด

Code: Select all

With Application
		.EnableEvents=True
		.ScreenUpdating=True
End With
ไปใส่ในบรรทัดก่อนโค้ด Exit Sub ทุกตำแหน่งครับ
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

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

#5

Post by DhitiBank »

สำหรับการแก้ปัญหาให้มีการ EnableEvent อีกครั้ง รบกวนคุณแทรก module ใหม่ขึ้นมา 1 module แล้วเขียนโค้ด

Code: Select all

Public sub Act_event()
	Application.EnableEvents=True
End Sub
จากนั้นกดปุ่ม F8 เพื่อให้โค้ดรันจนจบ คราวนี้หากคุณแทรกโค้ดก่อน Exit Sub ตามโพสต์ด้านบนเสร็จแล้ว เมื่อคุณคีย์เลขและกดปุ่ม TAB ผลก็จะเป็นไปตามที่ต้องการครับ

ปล. วิธีสั่งให้ Events ถูกเปิดใช้งานอีกครั้ง ผมทราบแค่วิธีนี้ ไม่แน่ใจว่าจะทำวิธีอื่นได้อีกหรือเปล่า
iKriTz
Member
Member
Posts: 3
Joined: Mon Jan 12, 2015 11:13 am

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

#6

Post by iKriTz »

อ่อ เป็นที่ Exit Sub นั่นเอง
ขอบคุณครับ คุณ DhitiBank
แต่จริงๆแล้วที่ผมใส่ Exit Sub แทรกไว้เพราะคิดว่ามันน่าจะทำให้ MsgBox ขึ้นเตือนเพียงครั้งเดียว

ทีนี้ผมเลยลองเอา Exit Sub ออกทุกตำแหน่งแล้ว ปรากฎว่าสามารถรันโปรแกรมได้แล้ว
ขอบคุณอีกครั้งครับและขอโทษที่ตอบช้าครับ
Post Reply