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

ลองตามภาพครับ
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 ตัวไหนก็ตามมันก้จะเป็นเลขล่าสุดใช่ไหมครับ
ขอบคุณครับ

การจะดูว่า Object นั้น ๆ หมายเลขอะไรให้สังเกตตามภาพครับ
Re: เกี่ยวกับ Botton (from Control)
Posted: Thu Jun 20, 2013 12:16 pm
by snasui
poipoi wrote:มีคำถามต่อครับว่า;
จาก checkbox ที่ผมได้สร้างขึ้นและให้ทำงานโดยใช้ Assign Macro นั้น จะสามารถใช้ปุ่ม ActiveX ในการสั่งงานให้ทั้งหมดสามารถติ๊กถูกหรือยกเลิกการติ๊กถูกทั้งหมดได้หรือไม่ครับ??
ผมได้แนบไฟล์ไว้ให้แล้วครับ
ขอบคุณครับ

การจะ 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

ลองเขียนมาดูก่อนครับ ได้เท่าไรก็เท่านั้น โดยเป็น 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

ไม่เข้าใจครับ ไม่ทราบว่าตอน 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

ลองดูตัวอย่างการปรับ 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

ลองดูตัวอย่างการ 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

กรณีไม่ต้องการเขียน 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 ทั้งหมดใช้การได้ดีแล้วครับ
ขอบคุณครับที่สละเวลามาให้คำแนะนำครับ
ขอบคุณมากครับ