Page 1 of 1

ข้อสอบแบบปรนัย แบบเลือกตอบ

Posted: Fri Sep 26, 2014 1:30 am
by WRKU
โปรแกรมนี้ อยากจะเขียนต่อยอดจากบทความ การควบคุม Option Button ที่สร้างขึ้นเองด้วย VBA wordpress/custom-option-button/

จากบทความเราเปลื่ยนทิศทางจากแนวตั้งให้เป็นแนวนอน ก็จะเป็นข้อสอบปรนัยแบบเลือกตอบ ก. ข. ค. ง.

1 ข้อ จะต้องเขียน Sub Function 4 ชุด
10 ข้อ จะต้องเขียน Sub Function 40 ชุด

เลย อยากเขียน Sub Function เดียวใช้ได้ทุกข้อ(ทุก Shape) แต่ติดอยู่ที่ว่า เมื่อเราเอา mouse คลิก รูปภาพ แบบ Shape แล้วอยากได้ Name ของ Shape นั้นเพื่อส่งค่าผ่านตัวแปร เพื่อจะนำไปเช็คเงื่อนไขต่อไป

สรุปคำถามแบบ เหมารวมคือ ช่วยแนะนำ วิธีเขียน Code vba ให้มันสั้นกว่านี้หน่อยครับ

Re: ข้อสอบแบบปรนัย แบบเลือกตอบ

Posted: Fri Sep 26, 2014 11:52 am
by ZEROV
Shape ทุกตัวสามารถกำหนดมาโครเดียวกันแต่จะทำงานไม่เหมือนกันได้
ค้นคำ
onaction property,application.caller

ตัวอย่าง Code

Code: Select all

Sub Action1()
Dim shp As Shape
Set shp = ActiveSheet.Shapes(Application.Caller)
With shp
.Width = .Height
.OnAction = "Action2"
[a1] = TypeName(shp) & " " & shp.Name
End With
End Sub
Sub Action2()
Dim shp As Shape
Set shp = ActiveSheet.Shapes(Application.Caller)
With shp
.Width = .Height * 2
.OnAction = "Action1"
[a1] = TypeName(shp) & " " & shp.Name
End With
End Sub

Re: ข้อสอบแบบปรนัย แบบเลือกตอบ

Posted: Fri Sep 26, 2014 6:50 pm
by WRKU
ขอบคุณ มากๆ ครับ

Re: ข้อสอบแบบปรนัย แบบเลือกตอบ

Posted: Fri Sep 26, 2014 7:03 pm
by snasui
:D สำหรับการทำงานลักษณะนี้เราจะใช้ Option Button มาช่วย แต่หากต้องการสร้าง Obj ขึ้นเองก็ย่อมได้แต่จะยุ่งยาก

ใน Link ที่ผมเขียนไว้นั้นเป็นตัวอย่างหนึ่งที่เป็นการจัด Group ของ Object ด้วย Code ทำขึ้นอย่างง่าย ๆ

กรณีมี Object เป็นจำนวนมาก สามารถใช้ Code ตามด้านล่างเข้าไปจัดการได้ โดย Assign Macro ให้กับ Oval ทุกตัวครับ

Code: Select all

Sub test0()
    Dim obj As Object, objOther As Object
    Dim objRow As Integer, point As Integer
    Set obj = ActiveSheet.Shapes(Application.Caller)
    objRow = obj.TopLeftCell.Row
    '1 is column d and 4 is column g
    point = obj.TopLeftCell.Column - 3
    For Each objOther In ActiveSheet.Shapes
        If objOther.TopLeftCell.Row = objRow Then
            If objOther.Name = obj.Name Then
                objOther.Fill.ForeColor.RGB = rgbRed
                ActiveSheet.Cells(objRow, "h").Value = point
            Else
                objOther.Fill.ForeColor.RGB = rgbWhite
            End If
        End If
    Next objOther
End Sub

Re: ข้อสอบแบบปรนัย แบบเลือกตอบ

Posted: Mon Sep 29, 2014 6:35 pm
by WRKU
codeที่เขียน มาเป็นอาทิตย์ เหลือแค่นี้เอง

code ของ อาจารย์
ใช้งานง่าย สะดวกกว่าเดิม แค่ Assign Macro ให้กับ Oval ทุกตัว ก็ทำงานตรงเงื่อนไขแล้ว
แล้วยังไม่ต้องเสียเวลาตั้งชื่อ shape อีก ประหยัดเวลามากครับ