Page 1 of 1

การเลือก run code ใน module VBA

Posted: Sun Dec 22, 2019 3:03 am
by ch.jew10
สวัสดีครับ
ผมมี code VBA อยู่ 2 module คือ module ที่ 3 และ 4 ตามไฟล์แนบครับ
ที่ sheet QC_from cell F2 และ F3 จะให้เลือกว่าต้องการ run code module ไหน
โดยใช้ค่า Cell G2 เป็นตัวกำหนด
และที่ Sheet QC_from เขียน code เรียก module มาใช้งานแต่ code ยังไม่สามารถทำงานได้ครับ โดยมีความต้องการดังนี้ครับ
module 3 (Scan_QC) ที่cell f2/f3 ที่กล่าวไว้ด้านบน ถูกเลือกไว้ที่ QC แบบมีเบอร์โทร เมือ scan barcode มาจนถึง ช่อง phone no. แล้วให้เรียก module scan_QC มาทำงานอัตโนมัติ

module 4 (Scan_QC_nophone ) ที่cell f2/f3 ที่กล่าวไว้ด้านบน ถูกเลือกไว้ที่ QC แบบไม่มีเบอร์โทร เมือ scan barcode มาจนถึง ช่อง EAN แล้วให้เรียก module scan_QC_nophone มาทำงานอัตโนมัติ

code ที่เขียนไว้เพื่อเลือกตามช่อง G2 ว่าจะ run module ไหน ตามนี้ครับ จึงขอความอนุเคราะห์ปรับแก้ code หรือแนวทางอื่น เพื่อให้ได้ตามความต้องการครับ
ขอบคุณมากครับ

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range) 'Excel VBA change event test for close.

If Range("Select_Marcro").Value = 1 Then

If Not Intersect(Target, Range("Scan_Phone")) Is Nothing Then
Application.EnableEvents = False
If Target = Range("Scan_Phone") Then
Call Scan_QC
End If
End If
End If
Application.EnableEvents = True
Exit Sub

ElseIf Range("Select_Marcro").Value > 1 Then

If Not Intersect(Target, Range("EAN_scan")) Is Nothing Then
Application.EnableEvents = False
If Target = Range("EAN_scan") Then
Call Scan_QC_Nophone
End If
End If
End If

Application.EnableEvents = True

End Sub

Re: การเลือก run code ใน module VBA

Posted: Sun Dec 22, 2019 12:26 pm
by snasui
:D ค่อย ๆ ถามตอบกันไปครับ

Code ที่เขียนมาไม่เป็นระเบียบและไม่ถูกต้องตามโครงสร้าง การเขียนแบบไม่เยื้อง อ่านและเข้าใจยากและมองไม่ออกว่า Code ไหนเป็นตัวหลัก Code ไหนเป็นตัวรองและจะทำเกิดความยุ่งยากในการ Debug

ในเบื้องต้นแก้ไขจากการดักจับ Change Event เป็นการเขียน Code เข้าไปใหม่ วิธีการคือ
คลิกขวาที่ Option QC แบบมีเบอร์โทร > Assign Macro > New > เขียน Code ตามด้านล่าง

Code: Select all

Sub OptionButton8_Click()
    If Worksheets("QC_From").Range("g2").Value = 1 Then
        Call Module3.Scan_QC
    Else
        Call Module4.Scan_QC_Nophone
    End If
End Sub


จากนั้นคลิกขวาที่ Option แบบไม่มีเบอร์โทร > Assign Macro > เลือก OptionButton8_Click

จากนั้นทดสอบคลิกทั้ง 2 Option ว่าให้ผลเป็นอย่างไร กรุณาปรับแต่งเรื่องการเยื้อง Code ให้เหมาะสม จะได้อ่านและตรวจสอบได้ง่ายว่าผิดพลาดตรงไหน อย่างไร การเยื้อง Code กรุณาอ่านที่นี่อย่างละเอียดครับ :arrow: การเยื้อง Code