Page 1 of 1

อยากให้ค่า L1 อ้างอิงกับมาโครครับ

Posted: Sat Nov 19, 2016 4:51 pm
by yangkodza
อยากให้ ค่า L1 อ้างอิง กับมาโครครับเช่น ถ้า L1 มีค่าเป็น 1 ก็รันมาโคร ป1ถ้า L1 มีค่าเป็น 3 ก็รันมาโคร ป3

ผมมีมาโคร ป1 - ป6 ครับ

Code: Select all

Sub ป1()
        ActiveSheet.Shapes.Range(Array("boxm1t1")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset4
          ActiveSheet.Shapes.Range(Array("boxm1t2")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        ActiveSheet.Shapes.Range(Array("boxm2t1")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        ActiveSheet.Shapes.Range(Array("boxm2t2")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        ActiveSheet.Shapes.Range(Array("boxm3t1")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        ActiveSheet.Shapes.Range(Array("boxm3t2")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        Range("C7:H7").Select
    ActiveCell.FormulaR1C1 = "ระดับชั้นประถมศึกษาปีที่ 1"
    Range("C8").Select
End Sub
Sub ป2()
        ActiveSheet.Shapes.Range(Array("boxm1t1")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
          ActiveSheet.Shapes.Range(Array("boxm1t2")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset4
        ActiveSheet.Shapes.Range(Array("boxm2t1")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        ActiveSheet.Shapes.Range(Array("boxm2t2")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        ActiveSheet.Shapes.Range(Array("boxm3t1")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        ActiveSheet.Shapes.Range(Array("boxm3t2")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        Range("C7:H7").Select
    ActiveCell.FormulaR1C1 = "ระดับชั้นประถมศึกษาปีที่ 2"
    Range("C8").Select
End Sub
Sub ป3()
        ActiveSheet.Shapes.Range(Array("boxm1t1")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
          ActiveSheet.Shapes.Range(Array("boxm1t2")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        ActiveSheet.Shapes.Range(Array("boxm2t1")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset4
        ActiveSheet.Shapes.Range(Array("boxm2t2")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        ActiveSheet.Shapes.Range(Array("boxm3t1")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        ActiveSheet.Shapes.Range(Array("boxm3t2")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        Range("C7:H7").Select
    ActiveCell.FormulaR1C1 = "ระดับชั้นประถมศึกษาปีที่ 3"
    Range("C8").Select
End Sub
Sub ป4()
        ActiveSheet.Shapes.Range(Array("boxm1t1")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
          ActiveSheet.Shapes.Range(Array("boxm1t2")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        ActiveSheet.Shapes.Range(Array("boxm2t1")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        ActiveSheet.Shapes.Range(Array("boxm2t2")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset4
        ActiveSheet.Shapes.Range(Array("boxm3t1")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        ActiveSheet.Shapes.Range(Array("boxm3t2")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        Range("C7:H7").Select
    ActiveCell.FormulaR1C1 = "ระดับชั้นประถมศึกษาปีที่ 4"
    Range("C8").Select
End Sub
Sub ป5()
        ActiveSheet.Shapes.Range(Array("boxm1t1")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
          ActiveSheet.Shapes.Range(Array("boxm1t2")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        ActiveSheet.Shapes.Range(Array("boxm2t1")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        ActiveSheet.Shapes.Range(Array("boxm2t2")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        ActiveSheet.Shapes.Range(Array("boxm3t1")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset4
        ActiveSheet.Shapes.Range(Array("boxm3t2")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        Range("C7:H7").Select
    ActiveCell.FormulaR1C1 = "ระดับชั้นประถมศึกษาปีที่ 5"
    Range("C8").Select
End Sub
Sub ป6()
        ActiveSheet.Shapes.Range(Array("boxm1t1")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
          ActiveSheet.Shapes.Range(Array("boxm1t2")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        ActiveSheet.Shapes.Range(Array("boxm2t1")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        ActiveSheet.Shapes.Range(Array("boxm2t2")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        ActiveSheet.Shapes.Range(Array("boxm3t1")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
        ActiveSheet.Shapes.Range(Array("boxm3t2")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset4
        Range("C7:H7").Select
    ActiveCell.FormulaR1C1 = "ระดับชั้นประถมศึกษาปีที่ 6"
    Range("C8").Select
End Sub
Capture.GIF

เปลี่ยนชั้น.xlsm

Re: อยากให้ค่า L1 อ้างอิงกับมาโครครับ

Posted: Sat Nov 19, 2016 10:58 pm
by snasui
:D ตัวอย่าง Code ครับ

Code: Select all

Sub Main()
    Select Case [l7]
        Case 1: »1
        Case 2: »2
        Case 3: »3
        Case 4: »4
        Case 5: »5
        Case 6: »6
    End Select
End Sub
กำหนดให้ปุ่มใด ๆ ให้เรียก Procedure Main โดยใช้ปุ่มนั้นปุ่มเดียวในการ Run โปรแกรมครับ

Re: อยากให้ค่า L1 อ้างอิงกับมาโครครับ

Posted: Sun Nov 20, 2016 7:10 am
by yangkodza
snasui wrote::D ตัวอย่าง Code ครับ

Code: Select all

Sub Main()
    Select Case [l7]
        Case 1: »1
        Case 2: »2
        Case 3: »3
        Case 4: »4
        Case 5: »5
        Case 6: »6
    End Select
End Sub
กำหนดให้ปุ่มใด ๆ ให้เรียก Procedure Main โดยใช้ปุ่มนั้นปุ่มเดียวในการ Run โปรแกรมครับ
อาจารย์ครับ แล้วถ้าเราไม่กำหนดปุ่มใด ๆ ให้เรียก Procedure Main
แต่ให้อ้างอิงจากค่า L7 เลย ต้องปรับแก้ยังงัยครับ

Re: อยากให้ค่า L1 อ้างอิงกับมาโครครับ

Posted: Sun Nov 20, 2016 7:17 am
by snasui
:D ดักจับผ่าน Change Event ได้ครับ

ดูตัวอย่าง Change Event ได้จาก Link นี้ครับ :arrow: Worksheet_Change

Re: อยากให้ค่า L1 อ้างอิงกับมาโครครับ

Posted: Sun Nov 20, 2016 8:19 am
by yangkodza
snasui wrote::D ดักจับผ่าน Change Event ได้ครับ

ดูตัวอย่าง Change Event ได้จาก Link นี้ครับ :arrow: Worksheet_Change
ตามไปแล้วครับ แล้วไปต่อหาใน google อีกที
สรุปว่าไปไม่รอดครับ
คงต้องให้ครูกดใช้ปุ่มไปก่อน เดี๋ยวส่งไฟล์งานคะแนนไม่ทัน
ขอบคุณมากครับอาจารย์ :D

Re: อยากให้ค่า L1 อ้างอิงกับมาโครครับ

Posted: Wed Nov 23, 2016 7:58 pm
by yangkodza
ตอนนี้เวลารันงาน จะติดดังภาพข้างล่าง
v01.GIF
ซึ่งค่าที่ฟ้อง อยู่ที่ L7
และต้องเอาเมาส์ไปคลิกที่แถบสูตรแล้วกด Enter ถึงจะทำงานตามปกติ
v02.GIF
รบกวนช่วยปรับให้ L7 ทำงานโดยอัตโนมัติด้วยครับ

อันนี้เป็น Code ที่ผมเขียน

Code: Select all

Function yangkodza(t) As String
Dim s As String
If t = 1 Then
Call Module13.»1
End If
If t = 2 Then
Call Module13.»2
End If
If t = 3 Then
Call Module13.»3
End If
If t = 4 Then
Call Module13.»4
End If
If t = 5 Then
Call Module13.»5
End If
If t = 6 Then
Call Module13.»6
End If
yangkodza = s
End Function
ผมศึกษา Worksheet_Change แล้ว
แต่ว่า ไม่สามารถรับค่าอ้างอิงเซลมาใช้ได้
เลยไม่รู้จะทำยังงัยดีครับ

Re: อยากให้ค่า L1 อ้างอิงกับมาโครครับ

Posted: Wed Nov 23, 2016 9:58 pm
by snasui
:D ที่บอกว่าศึกษามาแล้วนั้นช่วยแนบไฟล์ที่ได้ใช้ WorkSheet_Change มาด้วย จะได้ช่วยดูให้ครับ

Re: อยากให้ค่า L1 อ้างอิงกับมาโครครับ

Posted: Thu Nov 24, 2016 9:32 am
by yangkodza
snasui wrote::D ที่บอกว่าศึกษามาแล้วนั้นช่วยแนบไฟล์ที่ได้ใช้ WorkSheet_Change มาด้วย จะได้ช่วยดูให้ครับ
Capture01.GIF
ถ้าเรารับค่า WorkSheet_Change โดยตรงที่ E5
โปรแกรมจะทำงานได้ตามปกติ
ดัง Code

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$5" Then
Select Case [E5]
        Case 1: ป1
        Case 2: ป2
        Case 3: ป3
        Case 4: ป4
        Case 5: ป5
        Case 6: ป6
    End Select
    End If
            Range("E5").Select
End Sub
แต่โจทย์ ต้องการให้ Worksheet_Change รับค่าตัวแปรมาจาก E5
แล้วไปแสดงผลที่ E7
ดัง Code

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$7" Then
Select Case [E7]
        Case 1: ป1
        Case 2: ป2
        Case 3: ป3
        Case 4: ป4
        Case 5: ป5
        Case 6: ป6
    End Select
    End If
            Range("E5").Select
End Sub
โปรแกรมจะไม่สามารถใช้งานได้ครับ
รบกวนอาจารย์ช่วยปรับ Code ให้ทีครับ

จากความเข้าใจของผมตอนนี้ Worksheet_Change
จะทำงานก็ต่อเมื่อค่าในเซลล์เปลี่ยนแปลงเท่านั้น
ถ้าเป็นการเปลี่ยนสี ปรับขนาด เปลี่ยนฟอนต์
หรือการอ้างอิงเซลล์ Worksheet_Change จะไม่ทำงาน
ผมเข้าใจถูกต้องหรือเปล่าครับ :roll:
เปลี่ยนชั้น.xlsm

Re: อยากให้ค่า L1 อ้างอิงกับมาโครครับ

Posted: Thu Nov 24, 2016 1:31 pm
by DhitiBank
:?: :? :?: สงสัยครับ ทำไมคุณ yangkodza จึงไม่ใช่โค้ดแรกที่ทำงานได้ตามปกติโดยดักจับการเปลี่ยนแปลงที่ E5 ล่ะครับ เพราะถ้าหากต้องการให้ E7 มีค่าเหมือน E5 ก็ให้เปิดการคำนวณแผ่นงานเป็นแบบอัตโนมัติ หรือไม่ก็เพิ่มโค้ดเข้าไป เช่น [E7].value = [E5].value (โดยอาจใส่ก่อนหรือหลังโค้ด Selection ) ก็จะรันได้ปกติดีแล้วไม่ใช่เหรอครับ

Re: อยากให้ค่า L1 อ้างอิงกับมาโครครับ

Posted: Thu Nov 24, 2016 1:57 pm
by yangkodza
DhitiBank wrote::?: :? :?: สงสัยครับ ทำไมคุณ yangkodza จึงไม่ใช่โค้ดแรกที่ทำงานได้ตามปกติโดยดักจับการเปลี่ยนแปลงที่ E5 ล่ะครับ เพราะถ้าหากต้องการให้ E7 มีค่าเหมือน E5 ก็ให้เปิดการคำนวณแผ่นงานเป็นแบบอัตโนมัติ หรือไม่ก็เพิ่มโค้ดเข้าไป เช่น [E7].value = [E5].value (โดยอาจใส่ก่อนหรือหลังโค้ด Selection ) ก็จะรันได้ปกติดีแล้วไม่ใช่เหรอครับ

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$5" Then
[E7].Value = [E5].Value
Select Case [E5]
        Case 1: ป1
        Case 2: ป2
        Case 3: ป3
        Case 4: ป4
        Case 5: ป5
        Case 6: ป6
    End Select
    End If
            Range("E5").Select
End Sub
รอดแล้วครับ
ขอบคุณมากครับ :)