รหัส 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 สำหรับเคล็ดลับนี้