Первый пост, но долгое время пользователь!Во-первых, я хотел бы поблагодарить каждого за все отзывы о кодах, которые вы, ребята, размещаете в постах.Это помогло мне разработать код VBA больше, чем вы можете себе представить!
Хорошо, поэтому вопрос:
Справочная информация:
Я разрабатываю надстройку, ориентированную на VBA, дляЯ и коллеги, чтобы использовать.Частично это включает в себя функции, которые вы могли бы, кроме Excel, но не там.Некоторые из них было довольно легко сделать (например, инвертировать фильтры), но некоторые оказываются более сложными.Это один из тех примеров.
Проблема:
Следующий код предназначен для циклического выбора пользователем листов, применения пользовательского пароля или удаления существующего.Часть функции заключается в захвате паролей, которые нельзя удалить (т. Е. Потому что пользователь ввел неправильный пароль).Он отлично работает для первой ошибки, но устраняет ошибку времени выполнения (1004) для второй и повторяет ошибку после.У меня мало опыта работы с ошибками во время выполнения (старайтесь избегать ошибок!), Но я не могу заставить это работать.Любые идеи / помощь, чтобы остановить появление ошибки во время выполнения, были бы хорошими.
Код:
Dim SHT As Worksheet, Password As String, SHT_Names(0 To 30) As String
'PREP
'DISABLE APPLICATION FUNCTIONS
Call Quicker_VBA(False)
Application.EnableEvents = False
'USER PASSWORD OPTION
Password = InputBox("Please enter a password (leave blank for no password)", "Password")
'USER INFORMATION MESSAGES SETUP
MSG_Protect = "Added to-"
Protect_check = MSG_Protect
MSG_Unprotect = "Removed from-"
Unprotect_check = MSG_Unprotect
MSG_unable = "Unable to remove protection from-"
Unable_check = MSG_unable
'ID SHEETS SELECTED
For Each SHT In ActiveWindow.SelectedSheets
a = a + 1
SHT.Activate
SHT_Names(a) = SHT.name
Next
'MAIN
HomeSHT = ActiveSheet.name
'PROTECT SHEETS SELECTED BY USER
For b = 1 To a
Sheets(SHT_Names(b)).Select
Set SHT = ActiveSheet
'ENABLE OR REMOVE PROTECTION FROM SELECTED SHEET
If SHT.ProtectContents Then
On Error GoTo Password_FAIL
Application.DisplayAlerts = False
SHT.Unprotect Password
On Error GoTo 0
MSG_Unprotect = MSG_Unprotect & vbNewLine & Chr(149) & " " & SHT.name
Else:
'ENABLE FILTER CHECK
FilterOn = False
If ActiveSheet.AutoFilterMode Then FilterOn = True
'PROTECT SHEET
SHT.Protect Password, AllowFiltering:=FilterOn
'UPDATE USER MESSAGE
MSG_Protect = MSG_Protect & vbNewLine & Chr(149) & " " & SHT.name & " - Users can: Select locked and unlocked cells"
If FilterOn = True Then MSG_Protect = MSG_Protect & " and use filters"
End If
200 Next
'INFORM USER
If Protect_check <> MSG_Protect Then msg = MSG_Protect & vbNewLine & "___________________" & vbNewLine
If Unprotect_check <> MSG_Unprotect Then msg = msg & MSG_Unprotect & vbNewLine & "___________________" & vbNewLine
If Unable_check <> MSG_unable Then msg = msg & MSG_unable
MsgBox msg, , "Protection summary"
'TIDY UP
Sheets(HomeSHT).Activate
'ENABLE APPLICATION FUNCTIONS
Call Quicker_VBA(True)
Exit Sub
Password_FAIL:
MSG_unable = MSG_unable & vbNewLine & Chr(149) & " " & SHT.name
Application.EnableEvents = False
GoTo 200
End Sub