У меня есть фрагмент кода VBA на защищенном листе (форма запроса), который отображает столбец F, когда в столбцах D & E выбраны определенные значения. Кроме того, код гарантирует, что если условия выполняются,некоторые ячейки разблокированы, поэтому пользователь может их вводить, в противном случае они остаются заблокированными для редактирования.
Все работает, как нужно, НО, при заполнении требуемой информации, Excel действительно требуется время, чтобы принять введенные данные.Например, когда я набираю что-то в ячейку A (на самом деле не имеет значения, какая ячейка редактируется) и нажимаю Enter, Excel обрабатывает редактирование примерно 2-4 секунды.
Когда я создавалПодобных форм в прошлом я никогда не испытывал такой медлительности.Мой вопрос: есть ли что-то в предоставленном коде, который я могу изменить, чтобы он работал быстрее?Я что-то пропустил?Я использовал Application.Calculation
, Application.ScreenUpdating
, Application.DisplayStatusBar
и Application.EnableEvents
в коде, и это немного быстрее, но далеко не гладко.
Я хотел бы отладить его, чтобы он не был таким медленнымкак сейчас.Буду признателен за любые советы.
Private Sub Worksheet_Change(ByVal Target As Range)
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.EnableEvents = False
Pass = "4X4lZ7n0FxvCmQ?Z"
'-------------------------------------------------------------------------
'THIS SECTION HIDES/UNHIDES THE 'SECURITY GROUPS' COLUMN ON IF PA ACCOUNT CREATION, MODIFICATION OR REACTIVATION IS REQUESTED OR NOT
'-------------------------------------------------------------------------
'Unhides column F (security groups) if value in J17 is 1 (i.e. when PA account creation, modification or reactivation is requested)
If Range("J17").Value = "1" Then
ActiveSheet.Unprotect Password:=Pass
Columns("F").Hidden = False
ActiveSheet.Protect Password:=Pass
'Keeps column F (security groups) hidden if value in J17 is 0 (i.e. when anything else is requested including PA account deactivation)
ElseIf Range("J17").Value = "0" Then
ActiveSheet.Unprotect Password:=Pass
Columns("F").Hidden = True
ActiveSheet.Protect Password:=Pass
End If
'-------------------------------------------------------------------------
'THIS SECTION LOCKS/UNLOCKS THE 'SECURITY GROUPS' CELL FOR EACH USER BASED ON IF PA ACCOUNT CREATION, MODIFICATION OR REACTIVATION IS REQUESTED OR NOT
'-------------------------------------------------------------------------
'The 'Security Groups' cell for row 7
If Range("J7") = "1" Then
ActiveSheet.Unprotect Password:=Pass
Range("F7").Locked = False
ActiveSheet.Protect Password:=Pass
Else
ActiveSheet.Unprotect Password:=Pass
Range("F7").Locked = True
ActiveSheet.Protect Password:=Pass
End If
'The 'Security Groups' cell for row 8
If Range("J8") = "1" Then
ActiveSheet.Unprotect Password:=Pass
Range("F8").Locked = False
ActiveSheet.Protect Password:=Pass
Else
ActiveSheet.Unprotect Password:=Pass
Range("F8").Locked = True
ActiveSheet.Protect Password:=Pass
End If
'The 'Security Groups' cell for row 9
If Range("J9") = "1" Then
ActiveSheet.Unprotect Password:=Pass
Range("F9").Locked = False
ActiveSheet.Protect Password:=Pass
Else
ActiveSheet.Unprotect Password:=Pass
Range("F9").Locked = True
ActiveSheet.Protect Password:=Pass
End If
'The 'Security Groups' cell for row 10
If Range("J10") = "1" Then
ActiveSheet.Unprotect Password:=Pass
Range("F10").Locked = False
ActiveSheet.Protect Password:=Pass
Else
ActiveSheet.Unprotect Password:=Pass
Range("F10").Locked = True
ActiveSheet.Protect Password:=Pass
End If
'The 'Security Groups' cell for row 11
If Range("J11") = "1" Then
ActiveSheet.Unprotect Password:=Pass
Range("F11").Locked = False
ActiveSheet.Protect Password:=Pass
Else
ActiveSheet.Unprotect Password:=Pass
Range("F11").Locked = True
ActiveSheet.Protect Password:=Pass
End If
'The 'Security Groups' cell for row 12
If Range("J12") = "1" Then
ActiveSheet.Unprotect Password:=Pass
Range("F12").Locked = False
ActiveSheet.Protect Password:=Pass
Else
ActiveSheet.Unprotect Password:=Pass
Range("F12").Locked = True
ActiveSheet.Protect Password:=Pass
End If
'The 'Security Groups' cell for row 13
If Range("J13") = "1" Then
ActiveSheet.Unprotect Password:=Pass
Range("F13").Locked = False
ActiveSheet.Protect Password:=Pass
Else
ActiveSheet.Unprotect Password:=Pass
Range("F13").Locked = True
ActiveSheet.Protect Password:=Pass
End If
'The 'Security Groups' cell for row 14
If Range("J14") = "1" Then
ActiveSheet.Unprotect Password:=Pass
Range("F14").Locked = False
ActiveSheet.Protect Password:=Pass
Else
ActiveSheet.Unprotect Password:=Pass
Range("F14").Locked = True
ActiveSheet.Protect Password:=Pass
End If
'The 'Security Groups' cell for row 15
If Range("J15") = "1" Then
ActiveSheet.Unprotect Password:=Pass
Range("F15").Locked = False
ActiveSheet.Protect Password:=Pass
Else
ActiveSheet.Unprotect Password:=Pass
Range("F15").Locked = True
ActiveSheet.Protect Password:=Pass
End If
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
Application.EnableEvents = True
End Sub