รหัส VBA ไม่ทำงาน

ฉันมีรหัส VBA ต่อไปนี้:

ปัญหา

 ส่วนตัว Sub Worksheet_Change (ByVal Target เป็น Range) Dim cRow เป็น Integer ถ้า Intersect (Target, Range ("R11: R20")) ไม่มีอะไรแล้วออกจาก Sub ถ้า Target.Value = "F" แล้ว ActiveSheet.Unprotect cRow = Target.Row Range (Cells (cRow, "T"), Cells (cRow, "U")) Locked = True ActiveSheet.Protect สิ้นสุดถ้าหาก Target.Value = "T" หรือ Target.Value = "" จากนั้น ActiveSheet.Unprotect cRow = Target .Row Range (Cells (cRow, "T"), Cells (cRow, "U")) Locked = False ActiveSheet.Protect End ถ้า End Sub 

สิ่งที่ฉันต้องการคือ ClearContents for (cRow target.Row) ในตัวพิมพ์ใหญ่ก่อนที่จะถูกล็อก 3

  • ฉันมีแผ่นงาน Excel ในการคำนวณการทำงานล่วงเวลารวมถึงหลายแถวในแต่ละเดือนและแผ่นงานได้รับการคุ้มครอง แต่อนุญาตให้ผู้ใช้ป้อนข้อมูลลงในช่วงที่ระบุ (P11: P20, R11: X20)
  • นอกจากนี้ Range (R11: R20) ยังเป็นแถวที่มีเมนูรายการแบบดรอปค่า 4 ค่า (1, 2, 3, 4)
  • กรณีของฉัน: ตัวอย่างเช่นหากผู้ใช้เลือกค่า 3 หรือ 4 เฉพาะในเซลล์ (R15) ฉันต้องบล็อกหรือปกป้องช่วง (T15: U15) และถ้าใช้แผ่นเดียวกันเลือก 3 หรือ 4 ค่าในเซลล์ R19 เพื่อปกป้องช่วง (T19: U19) และอื่น ๆ
  • ดังนั้นฉันต้องการถ้าค่าบางค่าที่เลือกในเซลล์ที่เฉพาะเจาะจงเพื่อปกป้องบางช่วงภายในแถวเดียวกัน โปรดทราบว่าผู้ใช้อาจเลือกหนึ่งตัวเลือกหรือหลายตัวเลือกในแผ่นงานเดียวกัน

สารละลาย

สำหรับแบบสอบถามปัจจุบันของคุณฉันถือว่าคุณต้องการล้างเนื้อหาของคอลัมน์ T และ U ของแถวเป้าหมาย

 ส่วนตัว Sub Worksheet_Change (ByVal Target เป็น Range) Dim cRow เป็น Integer ถ้า Intersect (Target, Range ("R11: R20")) ไม่มีอะไรแล้วออกจาก Sub ย่อยหาก Target.Value = "F" แล้ว ActiveSheet.Unprotect cRow = Target.Row ด้วย ช่วง (Cells (cRow, "T"), Cells (cRow, "U")) .ClearContents .Locked = True End ด้วย ActiveSheet.Protect End ถ้าหาก Target.Value = "T" หรือ Target.Value = "" จากนั้น ActiveSheet .Unprotect cRow = Target.Row Range (Cells (cRow, "T"), Cells (cRow, "U")) ล็อค = False ActiveSheet.Protect End หาก End Sub 

ขอบคุณ TrowaD สำหรับเคล็ดลับนี้

บทความก่อนหน้านี้ บทความถัดไป

เคล็ดลับยอดนิยม