วันศุกร์ที่ 18 มีนาคม 2022
  3 ตอบกลับ
  เยี่ยมชม 9.9 พันครั้ง
0
โหวต
แก้
ฉันกำลังตั้งค่าสเปรดชีตเพื่อแสดงข้อมูลแนวโน้มสำหรับการทดสอบวิเคราะห์ผลิตภัณฑ์เคมี ฉันต้องการให้ข้อมูลแต่ละบรรทัดถูกล็อคเมื่อผู้ตรวจสอบตรวจสอบการถอดความข้อมูลดังกล่าวแล้ว ฉันสามารถล็อคบรรทัดเดียวโดยใช้รหัสนี้ใน VBA:

Worksheet_Change ย่อยส่วนตัว (เป้าหมายเป็นช่วง ByVal)
ถ้า Range("X3") = "No" แล้ว
Range("B3:W3") .Locked = False
ElseIf Range("X3") = "ใช่" แล้ว
ช่วง("B3:W3") ล็อคอยู่ = True
End If
ย่อยสิ้นสุด

คอลัมน์ X มีรายการดรอปดาวน์ที่มี "ใช่" และ "ไม่ใช่" เป็นสองตัวเลือก ฉันต้องการให้ข้อมูลแต่ละบรรทัดที่ถูกเพิ่มลงในแผ่นงาน จะถูกล็อกเมื่อผู้ตรวจทานได้เลือกใช่ในคอลัมน์นี้เพื่อให้แน่ใจว่าไม่มีการเปลี่ยนแปลงโดยไม่ได้ตั้งใจกับข้อมูลที่ผ่านมา เป็นไปได้ไหมโดยไม่ต้องทำซ้ำ about code สำหรับแต่ละบรรทัดอย่างไม่มีกำหนด?
2 ปีที่ผ่านมา
·
#2529
ยอมรับคำตอบ
1
โหวต
แก้
สวัสดี สเตฟานี เอส

โปรดลองใช้รหัสด้านล่าง หากคุณมีคำถามเพิ่มเติม โปรดอย่าลังเลที่จะถามฉัน

อแมนดา

Private Sub Worksheet_Change(ByVal Target As Range)
Dim xPassword As String
Dim xRgAddress As String
Dim xLockRgAddress As String
Dim Row As Integer

xPassword = "123456" 'Please replace 123456 with the password that protects the spreadsheet.
On Error Resume Next

If (Target.Column <> 24) Then
Exit Sub
End If

Row = Target.Row


If Target = "Yes" Then
If ActiveSheet.Range("B" & Row & ":W" & Row).Locked = False Then
ActiveSheet.Unprotect (xPassword)
ActiveSheet.Range("B" & Row & ":W" & Row).Locked = True
ActiveSheet.Protect Password:=xPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True
End If
ElseIf Target = "No" Then
If ActiveSheet.Range("B" & Row & ":W" & Row).Locked = True Then
ActiveSheet.Unprotect (xPassword)
ActiveSheet.Range("B" & Row & ":W" & Row).Locked = False
ActiveSheet.Protect Password:=xPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True
End If
End If


End Sub
2 ปีที่ผ่านมา
·
#2522
0
โหวต
แก้
ฉันยังต้องการให้มันเปลี่ยนสถานะของเซลล์เหล่านี้จากการปลดล็อกเป็นล็อกในขณะที่สเปรดชีตได้รับการปกป้อง มิฉะนั้น คุณลักษณะนี้จะไร้ประโยชน์
2 ปีที่ผ่านมา
·
#2529
ยอมรับคำตอบ
1
โหวต
แก้
สวัสดี สเตฟานี เอส

โปรดลองใช้รหัสด้านล่าง หากคุณมีคำถามเพิ่มเติม โปรดอย่าลังเลที่จะถามฉัน

อแมนดา

Private Sub Worksheet_Change(ByVal Target As Range)
Dim xPassword As String
Dim xRgAddress As String
Dim xLockRgAddress As String
Dim Row As Integer

xPassword = "123456" 'Please replace 123456 with the password that protects the spreadsheet.
On Error Resume Next

If (Target.Column <> 24) Then
Exit Sub
End If

Row = Target.Row


If Target = "Yes" Then
If ActiveSheet.Range("B" & Row & ":W" & Row).Locked = False Then
ActiveSheet.Unprotect (xPassword)
ActiveSheet.Range("B" & Row & ":W" & Row).Locked = True
ActiveSheet.Protect Password:=xPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True
End If
ElseIf Target = "No" Then
If ActiveSheet.Range("B" & Row & ":W" & Row).Locked = True Then
ActiveSheet.Unprotect (xPassword)
ActiveSheet.Range("B" & Row & ":W" & Row).Locked = False
ActiveSheet.Protect Password:=xPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True
End If
End If


End Sub
2 ปีที่ผ่านมา
·
#2531
0
โหวต
แก้
ขอบคุณมาก! รหัสนั้นทำงานได้อย่างสมบูรณ์ ฉันยังใหม่กับ VBA มาก ดังนั้นขอขอบคุณสำหรับความช่วยเหลือของคุณ! :)
  • หน้า:
  • 1
ไม่มีคำตอบสำหรับโพสต์นี้