П'ятниця, Березень 18 2022
  3 відповіді
  9.6 тис. Відвідувань
0
Голосів
розстібати
Я створюю електронну таблицю для даних тенденцій для аналітичного тестування хімічних продуктів. Я хотів би, щоб кожен рядок даних був заблокований, як тільки транскрипція цих даних буде перевірена рецензентом. Я можу заблокувати один рядок, використовуючи цей код у VBA:

Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Якщо Range("X3") = "Ні", Тоді
Діапазон ("B3:W3"). Заблоковано = хибно
ElseIf Range("X3") = "Так" Тоді
Діапазон("B3:W3").Заблоковано = True
End If
End Sub

Стовпець X містить спадний список із двома варіантами «Так» і «Ні». Я хотів би, щоб кожен рядок даних, доданий до аркуша, блокувався після того, як рецензент вибрав «Так» у цьому стовпці, щоб переконатися, що в минулі дані не було внесено ненавмисних змін. Чи можливо це без повторення коду about для кожного рядка необмежено?
2 років тому
·
# 2529
Прийнятий відповідь
1
Голосів
розстібати
Привіт StephanieS!

Будь ласка, спробуйте код нижче. Якщо у вас виникнуть додаткові запитання, не соромтеся запитати мене.

Аманда

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
Голосів
розстібати
Привіт StephanieS!

Будь ласка, спробуйте код нижче. Якщо у вас виникнуть додаткові запитання, не соромтеся запитати мене.

Аманда

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
На цю посаду ще немає відповідей.