Page 1 of 1

เกี่ยวกับ Botton (from Control)

Posted: Wed Jun 19, 2013 6:20 pm
by poipoi
ผมจะรู้ได้อย่างไรครับว่า botton นี้ใช้คำว่า checkbox รหัสอะไร เช่น;

Check_box01_click

เพราะเวลาผมสร้าง checkbox ขึ้นมาใหม่มันไม่มีบอกว่าตัวนี้คือลำดับที่เท่าไหร่ครับ (ตาม code ที่โชว์ด้านล่างครับ

เวลาจะเขียน macro code ก็จะไม่สามารบอกได้ว่าเราต้องการให้ checkbox หมายเลขนี้ๆทำงาน

ผมจึงอยากขอคำชี้แนะ และแนะนำจากทุกท่านมา ณ ที่นี้ด้วยครับ

ขอบคุณครับ

Code: Select all

Sub AF()

    ActiveSheet.Shapes("XXXXXXXXXXXXXXXXXXX").Select
    
    If Selection.ShapeRange.Fill.ForeColor.SchemeColor = 41 Then
    
    Selection.ShapeRange.Fill.Visible = msoTrue
    Selection.ShapeRange.Fill.Solid
    Selection.ShapeRange.Fill.ForeColor.SchemeColor = 1
    Selection.ShapeRange.Fill.Transparency = 0#
    Selection.ShapeRange.Line.Weight = 0.75
    Selection.ShapeRange.Line.DashStyle = msoLineSolid
    Selection.ShapeRange.Line.Style = msoLineSingle
    Selection.ShapeRange.Line.Transparency = 0#
    Selection.ShapeRange.Line.Visible = msoFalse
    
    Else
    
    Selection.ShapeRange.Fill.Visible = msoFalse
    Selection.ShapeRange.Fill.Solid
    Selection.ShapeRange.Fill.ForeColor.SchemeColor = 41
    Selection.ShapeRange.Fill.Transparency = 0#
    Selection.ShapeRange.Line.Weight = 0.75
    Selection.ShapeRange.Line.DashStyle = msoLineSolid
    Selection.ShapeRange.Line.Style = msoLineSingle
    Selection.ShapeRange.Line.Transparency = 0#
    Selection.ShapeRange.Line.Visible = msoFalse
        
    End If
    
Range("A1").Select
End Sub

Re: เกี่ยวกับ Botton (from Control)

Posted: Wed Jun 19, 2013 7:25 pm
by snasui
:D ลองตามภาพครับ

Re: เกี่ยวกับ Botton (from Control)

Posted: Thu Jun 20, 2013 8:42 am
by poipoi
ในเคสนี้ผมต้องทำไฟล์นี้ต่อจากคนอื่นครับ

แล้วต้องสร้าง checkbox ขึ้นมาใหม่โดยการคัดลอกของเดิมเพิ่มขึ้นไปเรื่อยๆ ซึ่งผมไม่รู้ว่าของเดิมมันหมายเลขที่เท่าไหร่แล้ว

ปล. เวลาเราสร้างใหม่มันจะสร้างต่อจากเลขล่าสุดใช่ไหมครับ แต่ในที่นี้เวลาผมคัดลอกจาก checkbox ตัวไหนก็ตามมันก้จะเป็นเลขล่าสุดใช่ไหมครับ

ขอบคุณครับ

Re: เกี่ยวกับ Botton (from Control)

Posted: Thu Jun 20, 2013 10:58 am
by poipoi
มีคำถามต่อครับว่า;

จาก checkbox ที่ผมได้สร้างขึ้นและให้ทำงานโดยใช้ Assign Macro นั้น จะสามารถใช้ปุ่ม ActiveX ในการสั่งงานให้ทั้งหมดสามารถติ๊กถูกหรือยกเลิกการติ๊กถูกทั้งหมดได้หรือไม่ครับ??

ผมได้แนบไฟล์ไว้ให้แล้วครับ

ขอบคุณครับ

Re: เกี่ยวกับ Botton (from Control)

Posted: Thu Jun 20, 2013 12:14 pm
by snasui
poipoi wrote:ในเคสนี้ผมต้องทำไฟล์นี้ต่อจากคนอื่นครับ

แล้วต้องสร้าง checkbox ขึ้นมาใหม่โดยการคัดลอกของเดิมเพิ่มขึ้นไปเรื่อยๆ ซึ่งผมไม่รู้ว่าของเดิมมันหมายเลขที่เท่าไหร่แล้ว

ปล. เวลาเราสร้างใหม่มันจะสร้างต่อจากเลขล่าสุดใช่ไหมครับ แต่ในที่นี้เวลาผมคัดลอกจาก checkbox ตัวไหนก็ตามมันก้จะเป็นเลขล่าสุดใช่ไหมครับ

ขอบคุณครับ
:D การจะดูว่า Object นั้น ๆ หมายเลขอะไรให้สังเกตตามภาพครับ

Re: เกี่ยวกับ Botton (from Control)

Posted: Thu Jun 20, 2013 12:16 pm
by snasui
poipoi wrote:มีคำถามต่อครับว่า;

จาก checkbox ที่ผมได้สร้างขึ้นและให้ทำงานโดยใช้ Assign Macro นั้น จะสามารถใช้ปุ่ม ActiveX ในการสั่งงานให้ทั้งหมดสามารถติ๊กถูกหรือยกเลิกการติ๊กถูกทั้งหมดได้หรือไม่ครับ??

ผมได้แนบไฟล์ไว้ให้แล้วครับ

ขอบคุณครับ
:D การจะ Check หรือ Uncheck สามารถ Loop ด้วย Code ได้ ให้ลองเขียนมาดูก่อน ติดตรงไหนแล้วค่อยถามกันครับ

Re: เกี่ยวกับ Botton (from Control)

Posted: Thu Jun 20, 2013 12:21 pm
by poipoi
รับทราบครับ

ขอไปลองเขียนดูก่อนครับผม

Re: เกี่ยวกับ Botton (from Control)

Posted: Thu Jun 20, 2013 2:10 pm
by poipoi
เรียนอาจารย์ครับ

ผมไม่ทราบจริงๆว่า code ที่ใช้เขียน Check box (from control) ที่ไม่ใช่ Active X control นั้นใช้ code อะไร.

แต่ถ้าเป็น Check box (Active X Control) นั้น สามารถเขียนได้ครับแต่...

จะไม่สามารถเปลี่ยนสีพื้นหลังเวลาติ๊กถูกให้ตัวมันได้ครับ

จึงอยากขอความกรุณาให้อาจารย์ช่วยไกค์ให้ทีครับ

ขอบคุณครับ

Re: เกี่ยวกับ Botton (from Control)

Posted: Thu Jun 20, 2013 8:10 pm
by snasui
:D ลองเขียนมาดูก่อนครับ ได้เท่าไรก็เท่านั้น โดยเป็น Code ที่แสดงให้เห็นว่าได้พยายามจัดการกับ Check box แล้ว ไม่ใช่นำ Code อื่นใดที่ไม่เกี่ยวข้องหรือสัมพันธ์กับการจัดการ Check box มาถาม เขียนได้แค่ไหนก็แค่นั้นครับ

Re: เกี่ยวกับ Botton (from Control)

Posted: Fri Jun 21, 2013 10:35 am
by poipoi
ผมได้ลองเขียน code ขึ้นมาแล้วครับ สามารถติ๊กได้ทุกช่องแล้วแต่ผมไม่สามารถสั่งให้มันโชว์สีแบบตอนที่ใช้ assign macro ได้ กับไม่สามารถให้มัน uncheck กลับทุกช่องได้ครับ

ส่วน code ที่ลองเขียนตามแนบครับ

Code: Select all

Private Sub cmd_af_org_Click()

Dim i As Long

If Range("E1").Value = "" Then
    For i = 22 To 28
        ActiveSheet.Shapes("check box " & i).ControlFormat.Value = True
    Next i
Else
    For i = 22 To 28
        ActiveSheet.Shapes("check box " & i).ControlFormat.Value = False
    Next i

    
End If

End Sub

Re: เกี่ยวกับ Botton (from Control)

Posted: Fri Jun 21, 2013 11:16 am
by snasui
:D ไม่เข้าใจครับ ไม่ทราบว่าตอน Check กับตอน Uncheck ต้องการให้เป็นสีใด ได้เขียน Code เพื่อกำหนดค่าตามต้องการแล้วยัง Code ชื่อว่าอะไร ติดที่บรรทัดใดครับ

Re: เกี่ยวกับ Botton (from Control)

Posted: Fri Jun 21, 2013 11:28 am
by poipoi
สีที่ต้องการจะให้เปลี่ยน code จะอยู่ที่ module 2 ครับ ซึ่ง check box แต่ละตัวจะ assign macro ตามที่กำหนดไว้ครับ

Code ก็จะเป็น

Code: Select all

ActiveSheet.Shapes("Check Box 02").Select
    
    If Selection.ShapeRange.Fill.ForeColor.SchemeColor = 27 Then   
        Selection.ShapeRange.Fill.Visible = msoTrue
        Selection.ShapeRange.Fill.Solid
        Selection.ShapeRange.Fill.ForeColor.SchemeColor = 1
        Selection.ShapeRange.Fill.Transparency = 0#
        Selection.ShapeRange.Line.Weight = 0.75
        Selection.ShapeRange.Line.DashStyle = msoLineSolid
        Selection.ShapeRange.Line.Style = msoLineSingle
        Selection.ShapeRange.Line.Transparency = 0#
        Selection.ShapeRange.Line.Visible = msoFalse
    Else    
        Selection.ShapeRange.Fill.Visible = msoTrue
        Selection.ShapeRange.Fill.Solid
        Selection.ShapeRange.Fill.ForeColor.SchemeColor = 27
        Selection.ShapeRange.Fill.Transparency = 0#
        Selection.ShapeRange.Line.Weight = 0.75
        Selection.ShapeRange.Line.DashStyle = msoLineSolid
        Selection.ShapeRange.Line.Style = msoLineSingle
        Selection.ShapeRange.Line.Transparency = 0#
        Selection.ShapeRange.Line.Visible = msoFalse    
    End If    
    Range("F1").Select
End Sub
แล้วทีนี้ ถ้าเกิดว่าลูกค้าต้องการ check ทุกช่องโดยที่ไม่ต้องกดทีละอันผมจึงอยากเพิ่ม Command Button ขึ้นมาให้มันเร็วขึ้นครับ โดยใช้ code ตามด้านล่างนี้ครับ

Code: Select all

Private Sub cmd_af_org_Click()
Dim i As Long
If ActiveSheet.Shapes("check box 22").ControlFormat.Value < 0 Then
    For i = 22 To 28
        ActiveSheet.Shapes("check box " & i).ControlFormat.Value = True
    Next i
Else
    For i = 22 To 28
        ActiveSheet.Shapes("check box " & i).ControlFormat.Value = False
    Next i   
End If
End Sub
ซึ่ง ณ ตอนนี้สามารถให้มัน Check และ Uncheck ได้แล้วครับ

แต่... ยังติดอยู่ที่ว่า เวลาที่มัน check ในทุกๆช่องแล้ว แต่สีมันไม่ปรากฎตามแบบ code ตัวที่แรกที่แนบไปครับ

จึงอยากจะขอคำปรึกษาอาจารย์ว่าควรจะใส่ตรงไหนดี

ขอบคุณครับ

Re: เกี่ยวกับ Botton (from Control)

Posted: Fri Jun 21, 2013 11:53 am
by snasui
:D ลองดูตัวอย่างการปรับ Code ตามด้านล่างครับ

Code: Select all

Private Sub cmd_af_org_Click()
    Dim i As Long
    If Range("E1").Value = "" Then
        For i = 22 To 28
            With ActiveSheet.Shapes("check box " & i)
                .ControlFormat.Value = True
                .Fill.ForeColor.SchemeColor = 27
            End With
        Next i
    Else
        For i = 22 To 28
            With ActiveSheet.Shapes("check box " & i)
                .ControlFormat.Value = False
                .Fill.ForeColor.SchemeColor = 1
            End With
        Next i
    End If
End Sub

Re: เกี่ยวกับ Botton (from Control)

Posted: Fri Jun 21, 2013 11:58 am
by poipoi
เรียนอาจารย์ สามารถใช้งานได้แล้วครับ

แต่ผมมีอีกปัญหาหนึ่งครับ คือ..จำนวนของ check box ผมมีมากกว่า 600 ตัว แต่ในระหว่าง 22 - 600 นั้นมีบางส่วนที่ไม่ได้ถูกสร้างขึ้น (เวลาเราสร้างมันขึ้นมา มันจะรันหมายเลขไปเรื่อยๆใช่ไหมครับ๗

ผมจึงอยากจะรบกวนอาจารย์ช่วยแนะนำหน่อยครับว่าควรจะใช้แบบไหนดีให้มันยืดหยุ่น และครอบคลุม check box ทั้งหมดใน sheet นั้นๆครับ

ขอบคุณครับ

Re: เกี่ยวกับ Botton (from Control)

Posted: Fri Jun 21, 2013 2:10 pm
by poipoi
แล้วก็อีก 1 คำถามครับ

ถ้าผมไม่อยาก assisgn macro ทีละตัว แต่ต้องการให้ใช้แค่คำสั่งเดียวในการใช้กับทั้งหมดจะเป็นไปได้หรือไม่ครับ เพราะตอนนี้ต้อง assign มันทีละตัวเลยครับ

Code: Select all

Sub Org_AO_Click()
    ActiveSheet.Shapes("Check Box 22").Select

    If Selection.ShapeRange.Fill.ForeColor.SchemeColor = 27 Then
        Selection.ShapeRange.Fill.ForeColor.SchemeColor = 1
    Else
        Selection.ShapeRange.Fill.ForeColor.SchemeColor = 27
    End If
    Range("E3").Select
End Sub

Sub Org_GQ_Click()
    ActiveSheet.Shapes("Check Box 23").Select

    If Selection.ShapeRange.Fill.ForeColor.SchemeColor = 27 Then
        Selection.ShapeRange.Fill.ForeColor.SchemeColor = 1
    Else
        Selection.ShapeRange.Fill.ForeColor.SchemeColor = 27
    End If
    Range("F3").Select
End Sub

Sub Org_KE_Click()
    ActiveSheet.Shapes("Check Box 24").Select

    If Selection.ShapeRange.Fill.ForeColor.SchemeColor = 27 Then
        Selection.ShapeRange.Fill.ForeColor.SchemeColor = 1
    Else
        Selection.ShapeRange.Fill.ForeColor.SchemeColor = 27
    End If
    Range("G3").Select
End Sub

Sub Org_MU_Click()
    ActiveSheet.Shapes("Check Box 25").Select

    If Selection.ShapeRange.Fill.ForeColor.SchemeColor = 27 Then
        Selection.ShapeRange.Fill.ForeColor.SchemeColor = 1
    Else
        Selection.ShapeRange.Fill.ForeColor.SchemeColor = 27
    End If
    Range("H3").Select
End Sub
ขอบคุณครับ

Re: เกี่ยวกับ Botton (from Control)

Posted: Fri Jun 21, 2013 2:21 pm
by snasui
:D ลองดูตัวอย่างการ Loop เพื่อกำหนดค่าให้กับ Check Box ทั้งหมดในชีทนั้น ๆ ครับ

Code: Select all

Private Sub cmd_af_org_Click()
    Dim obj As Object
    For Each obj In ActiveSheet.CheckBoxes
        If Range("e1") = "" Then
            obj.Value = True
            obj.Interior.ColorIndex = 8
        Else
            obj.Value = False
            obj.Interior.ColorIndex = 2
        End If
    Next obj
End Sub

Re: เกี่ยวกับ Botton (from Control)

Posted: Fri Jun 21, 2013 2:39 pm
by snasui
:D กรณีไม่ต้องการเขียน Code เพื่อกำกับ Object แต่ละตัว สามารถเขียน Code เพื่อทำการ Loop เพื่อตรวจสอบการกำหนดค่าทุก Object ได้ครับ โดยทุก Object ที่สร้างให้อ้างถึง Procedure เดียวกัน เช่น ใช้ Code ตามด้านล่าง

Code: Select all

Sub test()
    For Each obj In ActiveSheet.CheckBoxes
        If obj.Value = 1 Then
            obj.Interior.ColorIndex = 8
        Else
            obj.Interior.ColorIndex = 2
        End If
    Next obj
End Sub
แล้วกำหนดให้ทุก Checkbox อ้างถึง Procedure test

Re: เกี่ยวกับ Botton (from Control)

Posted: Fri Jun 21, 2013 2:40 pm
by poipoi
เรียนอาจารย์ครับ

ชีทนี้จะมี 2 เงื่อนไขด้วยกันครับ คือ;

1. การ check ว่าต้องการประเทศไหนบ้าง โดยการใช้ code ด้านล่างนี้ในการ assign ให้กับ check box ทีละตัวครับ

Code: Select all

Sub Org_AO_Click()
    ActiveSheet.Shapes("Check Box 22").Select

    If Selection.ShapeRange.Fill.ForeColor.SchemeColor = 27 Then
        Selection.ShapeRange.Fill.ForeColor.SchemeColor = 1
    Else
        Selection.ShapeRange.Fill.ForeColor.SchemeColor = 27
    End If
    Range("E3").Select
End Sub
แต่...ผมมี check box อยู่เกือบ 100 ตัว ผมจึงอยากจะหาวิธีเขียนสูตรให้ครอบคลุมทั้งหมดเพียงสูตรเดียว พอจะเป้นไปได้ไหมครับ ??

2. จะเป็นการใช้ Command Button ในการเลือกทั้ง Region เช่น
กดปุ่มคำว่า Africa จะเลือกทั้งหมดที่อยุ่ใน region Africa เป็นต้นครับ

ในส่วนนี้สามารถใช้งานได้แล้วครับจาก code ด้านล่างนี้ครับ

Code: Select all

Private Sub cmd_af_org_Click()
    Dim i As Long
    If Range("E1").Value = "" Then
        For i = 22 To 28
            With ActiveSheet.Shapes("check box " & i)
                .ControlFormat.Value = True
                .Fill.ForeColor.SchemeColor = 27
            End With
        Next i
    Else
        For i = 22 To 28
            With ActiveSheet.Shapes("check box " & i)
                .ControlFormat.Value = False
                .Fill.ForeColor.SchemeColor = 1
            End With
        Next i
    End If
End Sub
จากจุดนี้ผมจึงโฟกัสไปที่ข้อ 1 ครับ ที่จะให้อาจารย์รบกวนช่วยแนะนำครับ

ขอบคุณครับ

ปล. ขออภัยหากคำพูดบางคำสื่อความหมายทำให้อาจารย์ไม่เข้าใจครับ

Re: เกี่ยวกับ Botton (from Control)

Posted: Fri Jun 21, 2013 2:47 pm
by poipoi
เรียนอาจารย์ code ทั้งหมดใช้การได้ดีแล้วครับ

ขอบคุณครับที่สละเวลามาให้คำแนะนำครับ

ขอบคุณมากครับ