Piątek, 18 marca 2022
  3 Odpowiedzi
  9.9 tys. Wizyt
0
Głosów
odpiąć
Tworzę arkusz kalkulacyjny z danymi trendów na potrzeby testów analitycznych produktów chemicznych. Chciałbym, aby każda linia danych została zablokowana po zweryfikowaniu transkrypcji tych danych przez recenzenta. Jestem w stanie zablokować pojedynczą linię za pomocą tego kodu w VBA:

Prywatny Sub Worksheet_Change (ByVal Target As Range)
Jeśli Zakres("X3") = "Nie" Wtedy
Range("B3:W3").Zablokowany = Fałsz
ElseIf Range("X3") = "Tak" Zatem
Range("B3:W3").Zablokowany = Prawda
End If
End Sub

Kolumna X zawiera listę rozwijaną z dwiema opcjami „Tak” i „Nie”. Chciałbym, aby każda linia danych dodawana do arkusza była blokowana po wybraniu przez recenzenta w tej kolumnie opcji „tak”, aby mieć pewność, że w poprzednich danych nie zostaną wprowadzone żadne niezamierzone zmiany. Czy jest to możliwe bez konieczności ciągłego powtarzania kodu about dla każdej linii?
2 lat temu
·
#2529
Zaakceptowana odpowiedź
1
Głosów
odpiąć
Cześć StephanieS,

Wypróbuj poniższy kod. Jeśli masz dalsze pytania, nie wahaj się mnie zapytać.

Amanda

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 lat temu
·
#2522
0
Głosów
odpiąć
Potrzebuję go również, aby móc zmienić status tych komórek z odblokowanych na zablokowane, podczas gdy arkusz kalkulacyjny jest chroniony, w przeciwnym razie ta funkcja będzie bezużyteczna.
2 lat temu
·
#2529
Zaakceptowana odpowiedź
1
Głosów
odpiąć
Cześć StephanieS,

Wypróbuj poniższy kod. Jeśli masz dalsze pytania, nie wahaj się mnie zapytać.

Amanda

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 lat temu
·
#2531
0
Głosów
odpiąć
Bardzo dziękuję! Ten kod działał idealnie. Wciąż jestem bardzo nowy w VBA, więc naprawdę doceniam twoją pomoc! :)
  • Strony:
  • 1
Nie ma jeszcze odpowiedzi na ten post.