Page 1 of 1

VBA ล็อคเซลล์ตามเงื่อนไขที่กรอก ปลดล็อคเซลล์เมื่อเข้าเงื่อนไข

Posted: Fri Sep 03, 2021 11:58 pm
by aueijung
เรียนสอบถามอาจารย์ครับ
ผมอยากทราบครับว่า ถ้าเราจะกำหนดให้ Sheet1 เซลล์ F8:F62 มีสถานะเป็นเซลล์ที่ถูกล็อคอยู่ ถ้ามีการกรอกค่าตัวเลขใดๆ ที่เซล์ F7 เซลล์ที่ถูกล็อคอยู่คือเซลล์ F8:F62 ให้มันปลดล็อค เรากำหนดแบบใดให้ได้ค่าที่ถูกต้องครับ
ข้อมูลที่ต้องการคือ ถ้าไม่มีการกำหนดคะแนนเต็มก่อน จะไม่สามารถป้อนคะแนนให้นักเรียนแต่ละคนได้
VBA ที่ใช้ใน Sheet1 คือ

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("F7") = "" Then
        Range("F8:F62").Locked = True
    ElseIf Range("F7") <> "" Then
       Range("F8:F62").Locked = False
    End If
End Sub 

Re: VBA ล็อคเซลล์ตามเงื่อนไขที่กรอก ปลดล็อคเซลล์เมื่อเข้าเงื่อนไข

Posted: Sat Sep 04, 2021 6:25 am
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

'Other code
If Target.Address(0, 0) = "F7" Then
    If Target.Value = "" Then
        Range("F8:F62").Locked = True
        Me.Protect Password:="pass"
    ElseIf Target.Value <> "" Then
        If IsNumeric(Target.Value) Then
            Me.Unprotect Password:="pass"
            Range("F8:F62").Locked = False
        Else
            Range("F8:F62").Locked = True
            Me.Protect Password:="pass"
        End If
    End If
End If
'Other code

Re: VBA ล็อคเซลล์ตามเงื่อนไขที่กรอก ปลดล็อคเซลล์เมื่อเข้าเงื่อนไข

Posted: Sat Sep 04, 2021 1:24 pm
by aueijung
ขอบพระคุณมากๆ ครับอาจารย์ โค๊ดใช้ได้ดีครับ
แต่สงสัยตรงจุดนึงครับ มี Run-time error แจ้งบอกว่า ไม่สามารถตั้งค่าคุณสมบัติ Locked ของคลาส Range ได้ เกิดจากสาเหตุใดครับผม

เราสามารถทำให้
Range("F8:F62") ล็อค โดยไม่ต้องไป ยกเลิกการป้องกันแผ่นงาน หรือ ป้องกันแผ่นงาน เพียงแค่กรอกคะแนนเต็มที่ cell F7 การปลดล็อคก็จะเกิดกับ Range("F8:F62") ทันที แต่พอเอาคะแนนเต็มที่ cell F7 ออก การล็อคก็จะเกิดกับ Range("F8:F62") ทันทีเช่นกัน เพราะ Sheet1 มีการ ป้องกันแผ่นงาน อยู่แล้ว
สรุปคือ มองแค่ cell F7 ไม่ใส่ค่าใดๆ Range ดังกล่าวอยู่ในสถานะล็อค พอใส่ค่าใดๆ ให้กับ cell F7 Range ดังกล่าวอยู่ในสถานะปลดล็อค

ขอบพระคุณครับอาจารย์

Re: VBA ล็อคเซลล์ตามเงื่อนไขที่กรอก ปลดล็อคเซลล์เมื่อเข้าเงื่อนไข

Posted: Sat Sep 04, 2021 3:20 pm
by snasui
:D Code ที่ผมเขียนเป็นตัวอย่างไปนั้นมีการตรวจสอบหาก F7 มีการเปลี่ยนแปลง โดยมีขั้นตอนการทำงานคือ
  1. หาก F7 เป็นค่าว่าง
    1. กำหนดคุณสมบัติ Locked เป็น True
    2. ทำการป้องกัน
  2. หาก F7 ไม่เป็นค่าว่าง
    1. หาก F7 เป็นตัวเลข
      1. ปลดการป้องกัน
      2. กำหนดคุณสมบัติ Locked เป็น False
    2. หาก F7 ไม่เป็นตัวเลข
      1. กำหนดคุณสมบัติ Locked เป็น True
      2. ทำการป้องกัน
ซึ่งต้องทำความเข้าใจและปรับปรุงมาเองว่าต้องการให้เป็นอย่างไร ติดตรงไหนค่อยถามกันต่อครับ

กรณี Error ที่กล่าวมาผมยังไม่พบปัญหานั้นครับ