snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
Forum rules
ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
iKriTz
Member
Posts: 3 Joined: Mon Jan 12, 2015 11:13 am
#1
Post
by iKriTz » Mon Jan 12, 2015 11:48 am
รบกวนสอบถามครับ
ผมได้ทำไฟล์การตรวจวัดขนาดของชิ้นงาน 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
DhitiBank
Gold
Posts: 1676 Joined: Mon Oct 15, 2012 12:07 am
#2
Post
by DhitiBank » Mon Jan 12, 2015 2:46 pm
ลองใส่คำสั่งนี้เข้าไป น่าจะช่วยได้ครับ
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
Posts: 3 Joined: Mon Jan 12, 2015 11:13 am
#3
Post
by iKriTz » Mon Jan 12, 2015 4:50 pm
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 ขึ้นเตือนเลยครับ
เหมือนมันนิ่งไปเลยครับ
DhitiBank
Gold
Posts: 1676 Joined: Mon Oct 15, 2012 12:07 am
#4
Post
by DhitiBank » Mon Jan 12, 2015 5:22 pm
ขออภัยครับ
ผมไม่ได้ดูว่ามีโค้ด
Exit Sub อยู่ด้วย
คุณต้องนำโค้ด
Code: Select all
With Application
.EnableEvents=True
.ScreenUpdating=True
End With
ไปใส่ในบรรทัดก่อนโค้ด
Exit Sub ทุกตำแหน่งครับ
DhitiBank
Gold
Posts: 1676 Joined: Mon Oct 15, 2012 12:07 am
#5
Post
by DhitiBank » Mon Jan 12, 2015 5:32 pm
สำหรับการแก้ปัญหาให้มีการ EnableEvent อีกครั้ง รบกวนคุณแทรก module ใหม่ขึ้นมา 1 module แล้วเขียนโค้ด
Code: Select all
Public sub Act_event()
Application.EnableEvents=True
End Sub
จากนั้นกดปุ่ม F8 เพื่อให้โค้ดรันจนจบ คราวนี้หากคุณแทรกโค้ดก่อน Exit Sub ตามโพสต์ด้านบนเสร็จแล้ว เมื่อคุณคีย์เลขและกดปุ่ม TAB ผลก็จะเป็นไปตามที่ต้องการครับ
ปล. วิธีสั่งให้ Events ถูกเปิดใช้งานอีกครั้ง ผมทราบแค่วิธีนี้ ไม่แน่ใจว่าจะทำวิธีอื่นได้อีกหรือเปล่า
iKriTz
Member
Posts: 3 Joined: Mon Jan 12, 2015 11:13 am
#6
Post
by iKriTz » Wed Jan 14, 2015 2:35 pm
อ่อ เป็นที่ Exit Sub นั่นเอง
ขอบคุณครับ คุณ DhitiBank
แต่จริงๆแล้วที่ผมใส่ Exit Sub แทรกไว้เพราะคิดว่ามันน่าจะทำให้ MsgBox ขึ้นเตือนเพียงครั้งเดียว
ทีนี้ผมเลยลองเอา Exit Sub ออกทุกตำแหน่งแล้ว ปรากฎว่าสามารถรันโปรแกรมได้แล้ว
ขอบคุณอีกครั้งครับและขอโทษที่ตอบช้าครับ