Чтобы настроить точку останова:
breakpointObserver.observe(['(min-width: 500px)'])
Если я пойму вопрос правильно, то Вы будете тем, защищающим лист. Если это так, можно использовать следующий VBA:
myWorksheet.Protect contents:=True, userinterfaceonly:=True
Ключевая роль здесь "userinterfaceonly: = верный". Когда рабочий лист защищен с этим набором флага, макросы VBA все еще позволяются внести изменения.
Поместите этот код в WorkBook_Activate
событие, чтобы автоматически защитить рабочую книгу и установить флаг каждый раз, когда это активируется.
Править: Благодаря Lance Roberts для его рекомендации использовать Workbook_Activate
вместо Workbook_Open
.
Править: Так как вышеупомянутое, казалось, не работало, Вам, вероятно, придется перенестись, провальная часть Вашего кода VBA с оставляют команды без защиты/защищают. Если бы Вы делаете это, я также перенес бы весь макрос с обработчиком ошибок, так, чтобы лист не оставляли незащищенным после ошибки:
Sub MyMacro
On Error Goto HandleError
...
myWorksheet.unprotect
With ModifyCell.Validation
...
End With
myWorksheet.protect contents:=True, userinterfaceonly:=True
...
Goto SkipErrorHandler
HandleError:
myWorksheet.protect contents:=True, userinterfaceonly:=True
... some code to present the error message to the user
SkipErrorHandler:
End Sub
Править: Взгляните на этот поток в PCreview. Они прошли почти такие же шаги и пришли к тому же заключению. По крайней мере, Вы не являетесь одними!
я не уверен, является ли это универсальным решением, но когда у меня недавно была эта ошибка, я просто должен был сделать MywkSheet. Активироваться прямо, прежде чем я сделал Проверку. Добавить. Так:
' set list values based on some conditions not defined for brevitity'
If myCondition then
myNamedRange = "range1"
Else
myNamedRange = "range2"
End If
''--------------------------------------------------
Sheets("mysheet").Activate
''--------------------------------------------------
With modifyCell.Validation
.Delete
'Run time error occurs on the next line'
.Add Type:=xlValidateList, AlertStyle:=xlValidAltertStop, _
Operator:=xlBetween, Formula1:="=" & myNamedRange
...
' skipping more property setting code '
...
End With
в моем случае, ScreenUpdating уже был прочь, таким образом, пользователь никогда не видит, что листы переключаются назад и вперед. HTH.