Это продолжение предыдущего обсуждения ( Worksheet.Protect AllowDeletingRows не позволяет удалять строки ). Я не смог прокомментировать это сообщение, поэтому это сообщение.
Вкратце, проблема заключается в необходимости заблокировать определенные c ячеек / столбцов, одновременно позволяя конечному пользователю удалять строки (хотя строки содержат заблокированные ячейки). Эти два требования кажутся взаимоисключающими вне использования VBA.
Следующее решение было предложено @Louis в упомянутом выше потоке:
Sub Setup()
ws.Protect Password:="password", UserInterFaceOnly:=True, _
AllowFormattingColumns:=True, AllowFormattingRows:=True, _
AllowInsertingColumns:=True, AllowInsertingRows:=True, _
AllowDeletingColumns:=True, AllowDeletingRows:=False
End Sub
'Connect this Sub to a button.
Sub DeleteRow()
Dim userInput As String
Dim row As Long
userInput = InputBox("Please enter the row number you want to delete:", "Delete Row")
If Not IsNumeric(userInput) Then
MsgBox "Provided input is not numeric. Please insert a valid row number", vbExclamation
Exit Sub
End If
row = userInput
ws.rows(row).Locked = False
ws.rows(row).Delete
End Sub
Я попытался запустить этот код, однако после ввода желаемого номера строки во всплывающем окне я получил сообщение об ошибке «Ошибка выполнения '424': требуется объект». Использование отладчика на этом этапе показывает выделение строки «ws.rows (row) .Locked = False».
Прошло много лет с тех пор, как я пытался кодировать VBA, поэтому я не уверен, что делать дальше. Кроме того, в идеале было бы полезно удалить диапазон строк (например, строки 7-103 или 150-200) за один проход, а не построчно.
Любые предложения о том, как это можно сделать , либо изменив указанный выше код, либо другим способом?