Page 1 of 1

ขอคำแนะนำเพิ่มเติมเรื่องการคลิกเลือกของ VBA

Posted: Sat Oct 29, 2011 12:33 pm
by warit
ถึงคุณสันติพงษ์ครับ

สวัสดีครับสบายดีหรือเปล่าครับ :)

อ้างถึงคำถามที่ผมเคยถามไปครับ / เรื่องการบันทึกข้อมูล + การเคลียร์ข้อมูล ตอนนี้ผมสามารถ
ทำได้แล้วครับ :P และได้ส่งเอกสารตัวจริงมาให้ดู/แต่ส่งมาไม่ผ่านครับเพราะว่า Fille มีขนาดใหญ่ครับ เพราะว่ามันมีรูปอยู่ใน Sheet4 ครับ

และตอนนี้ผมลองแกะสูตรการคลิกเลือก จากโครงสร้าง Select...Case ของคุณสันติพงษ์ดูแล้วเครื่องกับไม่สามารถ Run ได้ครับกับแจ้งว่า ไม่เจอ Obj... จากการตั้ง Assign Mcaro
ครับ จึงอยากรบกวนให้คุณสันติพงษ์ช่วยดูโครงสร้างให้ด้วยครับว่าถูกหรือเปล่าครับ

ผมแนบเอกสารจากตัวอย่างเก่ามาแทนนะครับ
-----
งดถามถึงผมโดยตรง และหากเขียนชื่อผมควรเขียนให้ถูก ดูกระทู้นี้ประกอบครับ :arrow: viewtopic.php?f=3&t=1690

Re: ขอคำแนะนำเพิ่มเติมเรื่องการคลิกเลือกของ VBA

Posted: Sun Oct 30, 2011 6:47 am
by snasui
:D หากยังไม่ปรับปรุงผมยังไม่ตอบนะครับ :roll:

Re: ขอคำแนะนำเพิ่มเติมเรื่องการคลิกเลือกของ VBA

Posted: Mon Oct 31, 2011 11:10 am
by warit
ถึงคุณสันติพงศ์ และ พี่ๆ เพื่อนๆ สมาชิกทุกท่านครับ

ก่อนอื่นผมต้องขอโทษ ๆ คุณสันติพงศ์ ด้วยนะครับทีสะกดชื่อผิดมาตลอดโดยไม่ได้ดู Emil ให้ดีสะก่อน
ตั้งหลายครั้งเลยครับ

" สวัสดีครับ พี่ๆ เพื่อนๆ สมาชิกทุกท่านครับ " ผมวริษฐ์ สมาชิกใหม่ครับ / หากการ Post ของผม
ทำผิดกติกาในกลุ่มตรงจุดไหนแนะนำกลับมาได้นะครับยินดีรับฟ้งทุกๆเรื่องครับ

Re: ขอคำแนะนำเพิ่มเติมเรื่องการคลิกเลือกของ VBA

Posted: Mon Oct 31, 2011 12:53 pm
by snasui
:D ลองปรับ Code ที่ Module2 เป็นตามด้านล่างสังเกตว่า Code แทบจะเหมือนเดิมครับ

Code: Select all

Option Explicit

Dim obj As Object
Dim objg As Object

Sub SelectObj1(One As Object, Grp As Object)
    With One
        .Fill.ForeColor.SchemeColor = 10
        .Fill.Visible = Not .Fill.Visible
    End With
    Grp.Fill.Visible = msoFalse
    If One.Fill.Visible Then
        Select Case One.Name
            Case "Oval 15"
                Range("C14:C16").ClearContents
                Range("C14") = "IN"
            Case "Oval 16"
                Range("C14:C16").ClearContents
                Range("C15") = "P"
            Case "Oval 17"
                Range("C14:C16").ClearContents
                Range("C16") = "BL"
        End Select
    Else
        Range("C14:C16").ClearContents
    End If
End Sub

Sub ObjInvoice()
    Set obj = ActiveSheet.Shapes("Oval 15")
    Set objg = ActiveSheet.Shapes.Range(Array("Oval 16", "Oval 17"))
    SelectObj1 obj, objg
End Sub

Sub ObjPacking()
    Set obj = ActiveSheet.Shapes("Oval 16")
    Set objg = ActiveSheet.Shapes.Range(Array("Oval 15", "Oval 17"))
    SelectObj1 obj, objg
End Sub

Sub ObjBL()
    Set obj = ActiveSheet.Shapes("Oval 17")
    Set objg = ActiveSheet.Shapes.Range(Array("Oval 15", "Oval 16"))
    SelectObj1 obj, objg
End Sub

Re: ขอคำแนะนำเพิ่มเติมเรื่องการคลิกเลือกของ VBA

Posted: Mon Oct 31, 2011 2:41 pm
by warit
ถึงคุณสันติพงศ์ครับ

ขอบคุณมากครับ / และผมจะนำไปปรับสูตรแล้วจะรายงานผลลัพธ์กลับนะครับ

Re: ขอคำแนะนำเพิ่มเติมเรื่องการคลิกเลือกของ VBA

Posted: Mon Oct 31, 2011 6:35 pm
by warit
ถึงคุณสันติพงศ์ / และสมาชิกทุกท่านครับ

ต้องขอโทษอีกครั้งนะครับ / ตอนนี้ผมได้ลองทำตามคำแนะนำของคุณสันติพงศ์แล้วครับ
และทดลอง Run โปรแกรมดูแล้วผลลัพธ์ของสูตรคือคลิกเลือกเพียง 1 ต่อ 1 รายการเท่านั้นครับ

เป็นเพราะว่า "ผมเองครับ" ที่อธิบายความต้องการของโครงสร้างผิดครับ / สิ่งที่ต้องการคือสามารถคลิกเลือกได้ทุกๆอัน ( เลือกได้มากกว่า 1 รายการ หรือทั้งหมด ) และสามารถแสดงผลลัพธ์ได้เป็นอิสระครับ

ผมได้แนบเอกสารตัวเก่ามาประกอบครับ / ส่วนสูตรผมถอดสูตรไว้ในเอกสารตัวจริงครับไม่สามารถส่งผ่านมาได้ / เพราะว่าเอกสารมีขนาดใหญ่มากเพราะมีรูปภาพอยู่ในเอกสารประมาณ 13 รูปครับ

Re: ขอคำแนะนำเพิ่มเติมเรื่องการคลิกเลือกของ VBA

Posted: Mon Oct 31, 2011 8:42 pm
by snasui
:shock: การใช้ VBA จำเป็นต้องอธิบายเยอะ ๆ ละเอียดเท่าไรยิ่งดี จากกรณีนี้สังเกตว่าเขียน Code อีกแบบนึงเลยครับ คราวต่อไปควรปรับมาก่อนนะครับ

สำหรับตัวอย่าง Code ตามด้านล่างครับ

Code: Select all

Sub ObjInvoice()
    Set obj = ActiveSheet.Shapes("Oval 15")
    With obj
        .Fill.ForeColor.SchemeColor = 10
        .Fill.Visible = Not .Fill.Visible
        If .Fill.Visible Then
            Range("C14") = "IN"
        Else
            Range("C14") = ""
        End If
    End With
End Sub

Sub ObjPacking()
    Set obj = ActiveSheet.Shapes("Oval 16")
    With obj
        .Fill.ForeColor.SchemeColor = 10
        .Fill.Visible = Not .Fill.Visible
        If .Fill.Visible Then
            Range("C15") = "P"
        Else
           Range("C15") = ""
        End If
    End With
End Sub

Sub ObjBL()
    Set obj = ActiveSheet.Shapes("Oval 17")
    With obj
        .Fill.ForeColor.SchemeColor = 10
        .Fill.Visible = Not .Fill.Visible
        If .Fill.Visible Then
            Range("C16") = "B/L"
        Else
            Range("C16") = ""
        End If
    End With
End Sub

Re: ขอคำแนะนำเพิ่มเติมเรื่องการคลิกเลือกของ VBA

Posted: Tue Nov 01, 2011 1:30 pm
by warit
ถึงคุณสันติพงศ์ / และสมาชิกทุกท่านครับ

ขอขอบคุณมากครับผมได้รับ Code จากคุณสันติพงษ์แล้วครับ / ผมจะนำไปปรับในเอกสารและจะ
รายงานผลลัพธ์ให้ทราบในภายหลังนะครับ

ขอบคุณมากครับสำหรับคำแนะนำทีดีกลับมากทุก ๆ ครั้งครับ

Re: ขอคำแนะนำเพิ่มเติมเรื่องการคลิกเลือกของ VBA

Posted: Thu Nov 03, 2011 11:26 am
by warit
ถึงสมาชิกทุกท่านครับ / อาจารย์สันติพงศ์ครับ

ผมขออนุญาตแชร์เอกสารที่ผมกำลังทำอยู่ เผื่อจะมีสมาชิกท่านใด จะนำไปประยุกต์ หรือปรับเปลี่ยนตามความต้องการนะครับ / เอกสารชุดนี้เป็นการสั่งทำ ORDER FORM CERT ต่างๆ โดยใช้ Code VBA ในการเลือกประเภท Form..., จัดเก็บข้อมูล , เคลียร์ข้อมูล , ลบข้อมูล และเลือกข้อมูล ( โดยได้รับคำแนะนำดี ๆ มาจาก "อาจารย์สันติพงศ์ มาตลอด )

และต้องให้เครดิตจากหนังสือ + เวปไซต์ที่ผมไปคัดลอก Code VBA มาใช้ประยุกต์ในเอกสารชุดนี้ด้วยครับ

ปล.เอกสารที่จัดทำอาจจะดูยังไม่สมบรูณ์ต้องขออภัยไว ณ ทีนี้ด้วยนะครับ / มือใหม่เพิ่งเริ่มเรียนครับ :|