Excel - VBA для применения определенной / гранулярной защиты к конкретным рабочим листам? - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь получить довольно большую и сложную рабочую книгу, и мне просто кажется, что я не собираю все инструменты должным образом.

Я видел много примеров здесь и на других сайтах, которые будут проходить через цикл всех имен рабочих листов и применять защиту. Моя странность заключается в том, что у меня есть разные варианты защиты, которые я хотел бы включить или отключить на каждом отдельном листе. В настоящее время я борюсь с:

Private Sub Workbook_Open()

'For each Worksheet:
Sheets(Sheet1).Protect Password:="superpassword", UserInterFaceOnly:=True, Contents:=True, AllowFormattingCells:=True, _
    AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowInsertingColumns:=False, AllowInsertingRows:=False, _
    AllowInsertingHyperlinks:=False, AllowDeletingColumns:=False, AllowDeletingRows:=False, AllowSorting:=False, _
    AllowFiltering:=False, AllowUsingPivotTables:=False, DrawingObjects:=False, Scenarios:=False

Sheets(Sheet2).Protect Password:="superpassword", UserInterFaceOnly:=True,  Contents:=True, AllowFormattingCells:=True, _
    AllowFormattingColumns:=True, AllowFormattingRows:=False, AllowInsertingColumns:=False, AllowInsertingRows:=True, _
    AllowInsertingHyperlinks:=False, AllowDeletingColumns:=False, AllowDeletingRows:=False, AllowSorting:=False, _
    AllowFiltering:=False, AllowUsingPivotTables:=True, DrawingObjects:=False, Scenarios:=False 

‘and so on… for other sheets

End Sub

Но я сталкиваюсь с множеством ошибок крыс, пытаюсь ли я использовать Sheets () или Worksheets (). Просто не могу заставить его перебрать.

Я видел примеры применения UserInterfaceOnly ко всему листу в фоновом режиме, поэтому я понимаю, что таким образом можно немного его обрезать.

И должен быть быстрый / короткий способ перезвонить этому сабвуферу и повторно применить эти средства защиты, когда лист закрывается, да?

Заранее спасибо за любую помощь. Я понимаю, что это много, но я уже несколько недель бьюсь об этом, настраивая другие разделы рабочей книги, и мне кажется, что мой мозг в данный момент не работает в Excel.

1 Ответ

0 голосов
/ 09 мая 2018

В конце концов, у вас не будет идеального решения. Защита VBA на листах не помешает злоумышленникам получить доступ к тому, что вы там хранили. С помощью защиты, которую они имеют, просто перебить силу.

Предполагая, что вы согласны с вышесказанным и только пытаетесь отговорить (но не запретить) доступ пользователей к вашим листам, я бы сначала настроил вариант. Ваш цикл назначит этот вариант каждому из объектов листа в рабочей книге, и вы защитите их своим заявлением.

dim sht as WorkSheet
for each sht in ThisWorkbook.Sheets
    sht.protect {args go here...}
next sht
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...