:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

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

ฟอรัมถาม-ตอบปัญหาการใช้งานสูตรและฟังก์ชัน Excel
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
yangkodza
Bronze
Bronze
Posts: 372
Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021

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

#1

Post 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
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31258
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#2

Post 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 โปรแกรมครับ
yangkodza
Bronze
Bronze
Posts: 372
Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021

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

#3

Post 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 เลย ต้องปรับแก้ยังงัยครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31258
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#4

Post by snasui »

:D ดักจับผ่าน Change Event ได้ครับ

ดูตัวอย่าง Change Event ได้จาก Link นี้ครับ :arrow: Worksheet_Change
yangkodza
Bronze
Bronze
Posts: 372
Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021

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

#5

Post by yangkodza »

snasui wrote::D ดักจับผ่าน Change Event ได้ครับ

ดูตัวอย่าง Change Event ได้จาก Link นี้ครับ :arrow: Worksheet_Change
ตามไปแล้วครับ แล้วไปต่อหาใน google อีกที
สรุปว่าไปไม่รอดครับ
คงต้องให้ครูกดใช้ปุ่มไปก่อน เดี๋ยวส่งไฟล์งานคะแนนไม่ทัน
ขอบคุณมากครับอาจารย์ :D
yangkodza
Bronze
Bronze
Posts: 372
Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021

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

#6

Post 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 แล้ว
แต่ว่า ไม่สามารถรับค่าอ้างอิงเซลมาใช้ได้
เลยไม่รู้จะทำยังงัยดีครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31258
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#7

Post by snasui »

:D ที่บอกว่าศึกษามาแล้วนั้นช่วยแนบไฟล์ที่ได้ใช้ WorkSheet_Change มาด้วย จะได้ช่วยดูให้ครับ
yangkodza
Bronze
Bronze
Posts: 372
Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021

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

#8

Post 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
You do not have the required permissions to view the files attached to this post.
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

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

#9

Post by DhitiBank »

:?: :? :?: สงสัยครับ ทำไมคุณ yangkodza จึงไม่ใช่โค้ดแรกที่ทำงานได้ตามปกติโดยดักจับการเปลี่ยนแปลงที่ E5 ล่ะครับ เพราะถ้าหากต้องการให้ E7 มีค่าเหมือน E5 ก็ให้เปิดการคำนวณแผ่นงานเป็นแบบอัตโนมัติ หรือไม่ก็เพิ่มโค้ดเข้าไป เช่น [E7].value = [E5].value (โดยอาจใส่ก่อนหรือหลังโค้ด Selection ) ก็จะรันได้ปกติดีแล้วไม่ใช่เหรอครับ
yangkodza
Bronze
Bronze
Posts: 372
Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021

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

#10

Post 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
รอดแล้วครับ
ขอบคุณมากครับ :)
Post Reply