Vba excel как узнать защищен ли лист

To check for password protection one needs to try to unprotect the sheet and after that to protect it again (if it was not password protected), but at that point it looses all the protection settings the user had made. Like Allow PivotTables, Allow Formatting Cells and so on.
So one has to read the settings of the sheet first and when protecting it, applying the settings again.
Protection also means not only protectcontents but also protectobject and protectscenarios.
And if it is a Chart Sheet, it also needs a different procedure to check.
I spend som hours to create a macro which can do all this for ALL Sheets (even for Chart Sheets).

 Sub Run_CheckSheetPasswordProtection()
    'execudes the Function CheckSheetPasswordProtection
    'to detect if a sheet (Worksheet or Chart Sheet) is protected, password protected or not protected
    'protection setting of that sheet will remain the same after checking (other, simpler, macros will not take car for this)
    
    Dim wb As Workbook
    Dim ws As Variant 'variant is needed to handle Worksheets AND Chart Sheets
    Dim sh As Variant
    
    Set wb = ThisWorkbook 'or use: Workbooks("Name of my Workbook")
    
    '***check one sheet*****
'    'adjust your worksheet you want to test here
'    Set ws = wb.Worksheets("sheet1")
'
'    MsgBox ws.Name & ":     " & CheckSheetPasswordProtection(ws)
    
    
    
    '****check all sheets of a workbook**********
    
    For Each sh In wb.Sheets
        'write ansers to the Immediate Window
        Debug.Print sh.Name & ":     " & CheckSheetPasswordProtection(sh)
    Next sh
End Sub


Function CheckSheetPasswordProtection(YourSheet As Variant) As String
    'check if worksheets are protected with a password
    'doesn't destroy the previous protection settings of that sheet
    Dim ws As Variant
    Dim wb As Workbook
    Dim ProtectionResult As String
    
    'Settings of the sheet
    Dim sDrawingObjects As Boolean
    Dim sContents As Boolean
    Dim sScenarios As Boolean
    Dim sUserInterfaceOnly As Boolean
    Dim sAllowFormattingCells As Boolean
    Dim sAllowFormattingColumns As Boolean
    Dim sAllowFormattingRows As Boolean
    Dim sAllowInsertingColumns As Boolean
    Dim sAllowInsertingRows As Boolean
    Dim sAllowInseringHyperlinks As Boolean
    Dim sAllowDeletingColumns As Boolean
    Dim sAllowDeletingRows As Boolean
    Dim sAllowSorting As Boolean
    Dim sAllowFiltering As Boolean
    Dim sAllowUsingPivotTables As Boolean
    Dim sEnableSelection As Integer ' 0   Anything can be selected, -4142   Nothing can be selected, 1   Only unlocked cells can be selected.
    Dim sEnableOutlining As Boolean
    
    Set ws = YourSheet
    
    
        '***********if it is a worksheet**************
        If TypeName(ws) = "Worksheet" Then
        
            'check protection settings of the sheet
            sDrawingObjects = ws.ProtectDrawingObjects
            sContents = ws.ProtectContents
            sScenarios = ws.ProtectScenarios
            sUserInterfaceOnly = ws.ProtectionMode
            sAllowFormattingCells = ws.Protection.AllowFormattingCells
            sAllowFormattingColumns = ws.Protection.AllowFormattingColumns
            sAllowFormattingRows = ws.Protection.AllowFormattingRows
            sAllowInsertingColumns = ws.Protection.AllowInsertingColumns
            sAllowInsertingRows = ws.Protection.AllowInsertingRows
            sAllowInseringHyperlinks = ws.Protection.AllowInsertingHyperlinks
            sAllowDeletingColumns = ws.Protection.AllowDeletingColumns
            sAllowDeletingRows = ws.Protection.AllowDeletingRows
            sAllowSorting = ws.Protection.AllowSorting
            sAllowFiltering = ws.Protection.AllowFiltering
            sAllowUsingPivotTables = ws.Protection.AllowUsingPivotTables
            sEnableSelection = ws.EnableSelection
            sEnableOutlining = ws.EnableOutlining
            
            If ws.ProtectContents Or ws.ProtectDrawingObjects Or ws.ProtectScenarios Then
                ProtectionResult = "Protected"
            
                On Error Resume Next
                ws.Unprotect Password:=""
                If Err.Number > 0 Then
                    ProtectionResult = "PASSWORD protected"
                Else 'if sheet was not protected with password, protect it again with its previous setting
                    ws.Protect _
                    Password:="", _
                    DrawingObjects:=sDrawingObjects, _
                    Contents:=sContents, _
                    Scenarios:=sScenarios, _
                    AllowFormattingCells:=sAllowFormattingCells, _
                    AllowFormattingColumns:=sAllowFormattingColumns, _
                    AllowFormattingRows:=sAllowFormattingRows, _
                    AllowInsertingColumns:=sAllowInsertingColumns, _
                    AllowInsertingRows:=sAllowInsertingRows, _
                    AllowInsertingHyperlinks:=sAllowInseringHyperlinks, _
                    AllowDeletingColumns:=sAllowDeletingColumns, _
                    AllowDeletingRows:=sAllowDeletingRows, _
                    AllowSorting:=sAllowSorting, _
                    AllowFiltering:=sAllowFiltering, _
                    AllowUsingPivotTables:=sAllowUsingPivotTables, _
                    UserInterfaceOnly:=sUserInterfaceOnly
                
                    ws.EnableSelection = sEnableSelection
                    ws.EnableOutlining = sEnableOutlining
                End If 'checking for password (error)
                On Error GoTo 0
            Else 'if worksheet is not protected
                ProtectionResult = "No Protection"
            End If 'if protected
            
        
        Else '*************if it is a chart*************** If TypeName(ws) = "Chart"
            'check protection settings of the sheet
            sDrawingObjects = ws.ProtectDrawingObjects
            sContents = ws.ProtectContents
            
            'if chart is protected
            If ws.ProtectContents Or ws.ProtectDrawingObjects Then
                ProtectionResult = "Protected"
            
                On Error Resume Next
                ws.Unprotect Password:=""
                If Err.Number > 0 Then
                    ProtectionResult = "PASSWORD protected"
                Else 'if sheet was not protected with password, protect it again with its previous setting
                    ws.Protect _
                    Password:="", _
                    DrawingObjects:=sDrawingObjects, _
                    Contents:=sContents
                End If 'checking for password (error)
                On Error GoTo 0
            Else 'if worksheet is not protected
                ProtectionResult = "No Protection"
            End If 'if protected
            
        
        End If 'Worksheet or Chart
        CheckSheetPasswordProtection = ProtectionResult

End Function

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

Проверьте, защищен ли рабочий лист кодом VBA
Проверьте, защищена ли книга кодом VBA


Проверьте, защищен ли рабочий лист кодом VBA

Следующий код VBA может помочь вам легко проверить, какой лист защищен или незащищен в текущей книге. Пожалуйста, сделайте следующее.

1. Нажмите другой + F11 клавиши одновременно, чтобы открыть Microsoft Visual Basic для приложений окно.

2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули. Затем скопируйте и вставьте приведенный ниже код VBA в окно кода.

Код VBA: проверьте, защищен ли рабочий лист или нет

Sub GetProtectedSheets()
    Dim sh As Worksheet
    Dim xSaveSht As Worksheet
    Dim xSaveToRg As Range
    Dim xSaveToRg1 As Range
    Dim xTxt As String
    On Error Resume Next
    xTxt = ActiveWindow.RangeSelection.Address
    Set xSaveToRg = Application.InputBox("Please select a cell for saving the checking result:", "Kutools for Excel", xTxt, , , , , 8)
    If xSaveToRg Is Nothing Then Exit Sub
    If xSaveToRg.Worksheet.ProtectContents Then
        If MsgBox("This worksheet is protected, would you like to create a new sheet to save the checking result?", vbInformation + vbYesNo, "Kutools for Excel") = vbYes Then
            Set xSaveSht = ThisWorkbook.Worksheets.Add
            Set xSaveToRg = xSaveSht.Cells(1)
        Else
            Exit Sub
        End If
    End If
    Set xSaveToRg = xSaveToRg.Cells(1)
    Set xSaveToRg1 = xSaveToRg.Offset(0, 1)
    xSaveToRg.Value = "Protected worksheet"
    xSaveToRg1.Value = "Unprotected worksheet"
    Set xSaveToRg = xSaveToRg.Offset(1)
    Set xSaveToRg1 = xSaveToRg1.Offset(1)
    For Each sh In Worksheets
        If sh.Name <> xSaveSht.Name Then
            If sh.ProtectContents Then
                xSaveToRg.Value = sh.Name
                Set xSaveToRg = xSaveToRg.Offset(1)
            Else
                xSaveToRg1.Value = sh.Name
                Set xSaveToRg1 = xSaveToRg1.Offset(1)
            End If
        End If
    Next
End Sub

3. нажмите F5 ключ для запуска кода, затем Kutools for Excel появится диалоговое окно, выберите ячейку для поиска результатов проверки и, наконец, нажмите кнопку OK кнопку.

Заметки:

1. Если выбранная вами ячейка на защищенном листе, другая Kutools for Excel появится диалоговое окно, щелкните значок OK кнопку, результат проверки будет сохранен на новом созданном листе.

2. Напротив, если выбранная ячейка находится на незащищенном листе, результат проверки будет немедленно отображаться в выбранном диапазоне.

Вы можете увидеть результат проверки, как показано на скриншоте ниже:


Проверьте, защищена ли книга кодом VBA

Кроме того, вы можете проверить, защищена ли активная книга кодом VBA. Пожалуйста, сделайте следующее.

1. Нажмите другой + F11 клавиши одновременно, чтобы открыть Microsoft Visual Basic для приложений окно.

2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули. Затем скопируйте и вставьте приведенный ниже код VBA в окно кода.

Код VBA: проверьте, защищена ли книга или нет

Sub IsWorkbookProtected()
With ActiveWorkbook
  If .ProtectWindows Or .ProtectStructure Then
    MsgBox "This workbook is password protected"
  Else
    MsgBox "This workbook is not password protected"
  End If
End With
End Sub

3. нажмите F5 ключ для запуска кода.

Вы получите одно из следующих диалоговых окон на основе вашей книги.



Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Проверка Защиты листа

Катя

Дата: Понедельник, 10.02.2014, 09:14 |
Сообщение № 1

Подскажите пожалуйста как проверить установлена защита на листе или нет?
Sheets(1).Protect Password:=»1234″
…….
If Sheets(1).???? then
Защита есть
Else
Защиты нет
end if

 

Ответить

igrtsk

Дата: Понедельник, 10.02.2014, 10:02 |
Сообщение № 2

Группа: Проверенные

Ранг: Обитатель

Сообщений: 307


Репутация:

50

±

Замечаний:
0% ±


Excel 2016

Попытаться внести изменения в защищенную ячейку :)


Инструктор по применению лосей в кавалерийских частях РККА

 

Ответить

Катя

Дата: Понедельник, 10.02.2014, 10:07 |
Сообщение № 3

Ну как вариант, да. Т.е. можно попробовать внести изменения при возникновении ошибки — обработать ее и присвоить флаг, который потом проверить.
А нет ли более элегантного способа? Например в VBA есть уже что-то готовое? :)

 

Ответить

AndreTM

Дата: Понедельник, 10.02.2014, 10:32 |
Сообщение № 4

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

Замечаний:
0% ±


2003 & 2010

Свойства листа, начинающиеся на Protect* (типа .ProtectContents), не подходят?


Skype: andre.tm.007
Donate: Qiwi: 9517375010

 

Ответить

Катя

Дата: Понедельник, 10.02.2014, 10:45 |
Сообщение № 5

Наверное подойдут… Раз одного общего, типа Protected — нет… Спасибо!

 

Ответить

Wasilich

Дата: Понедельник, 10.02.2014, 11:16 |
Сообщение № 6

Группа: Друзья

Ранг: Старожил

Сообщений: 1232


Репутация:

326

±

Замечаний:
0% ±


2003

Типа так:
[vba]

Код

Sub Проверка_на_защиту()
      If Worksheets(1).ProtectContents Then
          MsgBox «Защита включена»
      Else
          MsgBox «Защита не включена»
      End If
End Sub

[/vba]

Сообщение отредактировал WasilicПонедельник, 10.02.2014, 11:18

 

Ответить

Alex_ST

Дата: Понедельник, 10.02.2014, 11:56 |
Сообщение № 7

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Чуть опоздал…
Но чтобы не пропадало даром.
То же самое, что предложил Василич, но запись покороче:[vba]

Код

Sub Is_Ws_Protected()
    MsgBox «Защита листа » & IIf(Me.ProtectContents, «в», «от») & «ключена»
End Sub

[/vba]



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

13 / 13 / 0

Регистрация: 15.01.2010

Сообщений: 144

1

Проверка защищенности листа

15.02.2012, 12:52. Показов 4492. Ответов 8


Студворк — интернет-сервис помощи студентам

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

макрос работает с активным листом



0



Апострофф

Заблокирован

15.02.2012, 12:59

2

Visual Basic
1
MsgBox ActiveSheet.ProtectContents



1



13 / 13 / 0

Регистрация: 15.01.2010

Сообщений: 144

15.02.2012, 15:02

 [ТС]

3

спасибо. невнимательно я читал хелп.



0



1904 / 781 / 31

Регистрация: 11.02.2010

Сообщений: 1,567

18.02.2012, 19:13

4

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



1



13 / 13 / 0

Регистрация: 15.01.2010

Сообщений: 144

19.02.2012, 20:53

 [ТС]

5

все уже сделал) ProtectContents как раз то, что надо было)



0



1014 / 118 / 2

Регистрация: 26.08.2011

Сообщений: 1,113

Записей в блоге: 2

20.02.2012, 01:50

6

а как им пользоваться — где почитать? ну зелень я, блин, в этом)))

Добавлено через 4 часа 52 минуты

Цитата
Сообщение от AndreA SN
Посмотреть сообщение

а как им пользоваться — где почитать? ну зелень я, блин, в этом)))

это я про «проводник объектов — F2 в редакторе»



0



1904 / 781 / 31

Регистрация: 11.02.2010

Сообщений: 1,567

20.02.2012, 16:17

7

Не по теме:

ничо, все такими были. я вот, по началу не знал как в ворде перейти на новую строку и не смог набрать титульный листик для курсовика, набрал КУРСОВАЯ РАБОТА и все, затык.

http://ru.wikipedia.org/wiki/Ф… ые_клавиши



1



Эксперт WindowsАвтор FAQ

17992 / 7618 / 890

Регистрация: 25.12.2011

Сообщений: 11,351

Записей в блоге: 17

20.02.2012, 21:17

8

Добраться через поиск к нужной команде:

Выделяем любую простенькую команду, Shift+F2, вводим в поле поиска команду «find», выделяем нужное свойство, например «Excel WorkSheetFunction Find» и нажимаем значек вопроса. Получаем описание.



1



1904 / 781 / 31

Регистрация: 11.02.2010

Сообщений: 1,567

23.02.2012, 01:00

9

чтоб уж совсем понятно

Миниатюры

Проверка защищенности листа
 



1



Содержание

  1. Excel VBA — Check if a worksheet is protected WITH A PASSWORD
  2. 2 Answers 2
  3. Linked
  4. Related
  5. Hot Network Questions
  6. Subscribe to RSS
  7. Vba excel узнать защищен ли лист
  8. Как проверить, защищен ли лист или книга в Excel?
  9. Проверьте, защищен ли рабочий лист кодом VBA.
  10. Проверить, защищена ли книга кодом VBA
  11. Как сделать индикатор защиты листа
  12. 1 ответ 1
  13. Метод Worksheet.Protect (Excel)
  14. Синтаксис
  15. Параметры
  16. Замечания
  17. Поддержка и обратная связь

Excel VBA — Check if a worksheet is protected WITH A PASSWORD

We can check if a sheet is protected using ProtectContents property. But how check if it is protected with a password?

2 Answers 2

I don’t believe there is a direct way of doing this by way of a property. Alternatively, though, you could attempt to unprotect the worksheet with a blank password and catch the error should it fail:

You can call this like:

And it will return True or False

To check for password protection one needs to try to unprotect the sheet and after that to protect it again (if it was not password protected), but at that point it looses all the protection settings the user had made. Like Allow PivotTables, Allow Formatting Cells and so on. So one has to read the settings of the sheet first and when protecting it, applying the settings again. Protection also means not only protectcontents but also protectobject and protectscenarios. And if it is a Chart Sheet, it also needs a different procedure to check. I spend som hours to create a macro which can do all this for ALL Sheets (even for Chart Sheets).

Linked

Hot Network Questions

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.3.17.43323

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

Источник

Vba excel узнать защищен ли лист

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

Удивительный! Использование эффективных вкладок в Excel, таких как Chrome, Firefox и Safari!
Экономьте 50% своего времени и сокращайте тысячи щелчков мышью каждый день!

Следующий код VBA может помочь вам легко проверить, какой лист защищен или незащищен в текущей книге. Пожалуйста, сделайте следующее.

1. Нажмите другой + F11 клавиши одновременно, чтобы открыть Microsoft Visual Basic для приложений окно.

2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули. Затем скопируйте и вставьте приведенный ниже код VBA в окно кода.

Код VBA: проверьте, защищен ли рабочий лист или нет

3. нажмите F5 ключ для запуска кода, затем Kutools for Excel появится диалоговое окно, выберите ячейку для поиска результатов проверки и, наконец, нажмите кнопку OK кнопку.

Заметки:

1. Если выбранная вами ячейка на защищенном листе, другая Kutools for Excel появится диалоговое окно, щелкните значок OK кнопку, результат проверки будет сохранен на новом созданном листе.

2. Напротив, если выбранная ячейка находится на незащищенном листе, результат проверки будет немедленно отображаться в выбранном диапазоне.

Вы можете увидеть результат проверки, как показано на скриншоте ниже:

Кроме того, вы можете проверить, защищена ли активная книга кодом VBA. Пожалуйста, сделайте следующее.

1. Нажмите другой + F11 клавиши одновременно, чтобы открыть Microsoft Visual Basic для приложений окно.

2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули. Затем скопируйте и вставьте приведенный ниже код VBA в окно кода.

Код VBA: проверьте, защищена ли книга или нет

3. нажмите F5 ключ для запуска кода.

Вы получите одно из следующих диалоговых окон на основе вашей книги.

С легкостью защитите или снимите защиту сразу с нескольких листов в книге в Excel:

Компания Kutools for Excel‘s Защитить лист и Снять защиту листа утилиты могут помочь вам легко защитить или снять защиту сразу нескольких листов в активной книге в Excel. См. Снимок экрана ниже:
Скачать полную версию 30 -дневная бесплатная пробная версия Kutools для Excel прямо сейчас!

Источник

Как проверить, защищен ли лист или книга в Excel?

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

Проверьте, если рабочий лист защищен кодом VBA
Проверить, защищена ли книга кодом VBA

Проверьте, защищен ли рабочий лист кодом VBA.

Потрясающе! Использование эффективных вкладок в Excel, таких как Chrome, Firefox и Safari!
Сэкономьте 50% своего времени и уменьшите тысячи щелчков мышью каждый день!

Следующий код VBA может помочь вам легко проверить, какой лист защищен или не защищен в текущей книге. Пожалуйста, сделайте следующее.

1. Одновременно нажмите клавиши Alt + F11 , чтобы открыть окно Microsoft Visual Basic для приложений .

2. В окне Microsoft Visual Basic для приложений нажмите Вставить > Модуль . Затем скопируйте и вставьте приведенный ниже код VBA в окно кода.

Код VBA: проверьте, защищен ли рабочий лист

3. Нажмите клавишу F5 , чтобы запустить код, затем появится диалоговое окно Kutools for Excel , выберите ячейку для поиска результатов проверки и, наконец, нажмите кнопку OK .

Примечания :

1. Если ячейка, которую вы выбрали на защищенном листе, появится другое диалоговое окно Kutools for Excel , нажмите кнопку OK , результат проверки будет сохранен в новый созданный рабочий лист.

2. Напротив, если выбранная ячейка находится на незащищенном листе, результат проверки будет немедленно отображаться в выбранном диапазоне.

Вы можете увидеть результат проверки, как показано на скриншоте ниже:

Проверить, защищена ли книга кодом VBA

Кроме того, вы можете проверить, защищена ли активная книга кодом VBA. Пожалуйста, сделайте следующее.

1. Одновременно нажмите клавиши Alt + F11 , чтобы открыть окно Microsoft Visual Basic для приложений .

2. В окне Microsoft Visual Basic для приложений нажмите Вставить > Модуль . Затем скопируйте и вставьте приведенный ниже код VBA в окно кода.

Код VBA: проверьте, защищена ли книга

3. Нажмите клавишу F5 , чтобы запустить код.

Вы получите одно из следующих диалоговых окон на основе вашей книги.

Легко защитить или снять защиту сразу нескольких листов в книге в Excel:

Kutools для Excel Защитить рабочий лист и Снять защиту рабочего листа могут помочь вам легко защитить или снять защиту сразу нескольких листов в активной книге в Excel. См. Снимок экрана ниже:
Загрузите полнофункциональную 30-дневную бесплатную версию Kutools for Excel прямо сейчас!

Источник

Как сделать индикатор защиты листа

Хочу сделать индикатор того, что лист защищен или не защищен, т.е. если я защищаю лист, то ячейка A1 становится красной, если снимаю защиту, зеленой.

Мой код не работает. Подскажите, что не так.

1 ответ 1

В VBA есть понятие событий листа. Это действия, на которые может реагировать код в VBA . Защита листа или ее снятие не являются событиями, макрос не сможет отслеживать эти действия. Условное форматировани тоже не поймет их.

Можно проверять свойство листа ProtectContents (установлена ли защита):

Но такая проверка сама по себе не сработает, ее нужно подвешивать на событие лиcта, книги, на кнопку. Т.е. какая-то индикация сработает не при изменении защиты, а при другом действии. Например, защитили лист, после этого нажали кнопку.

Запускать проверку состояния защиты листа событиями. Можно, но нежелательно. Например, событием изменения на листе Worksheet_Change :

При любом изменении будет срабатывать код проверки. 1000 раз за рабочий день что-то поменяли на листе — столько же раз макрос проверил состояние защиты.

О индикации заливкой. На защищенном листе можно менять заливку ячеек, если разрешено форматирование, т.е. при защите листа нужно устанавливать галку Разрешить форматирование ячеек. Забыли — получили ошибку при попытке поменять заливку.

Лучше вместо заливки менять значение ячейки. Она должна быть незащищенной (Формат ячейки-Защита, снять галку Защищаемая ячейка), а заливку сделать условным форматированием.

Но даже на защищенном листе сотрудник-шутник сможет изменить заливку на обратную )

Если уж очень надо получить такую индикацию и чтобы она была привязана непосредственно к действию защита/снятие, защищать лист можно макросом, подвешенным на кнопку на листе:

Макрос разместить в общем модуле. Естественно, при ручном изменении защиты макрос не сработает

Источник

Метод Worksheet.Protect (Excel)

Защищает лист, чтобы его нельзя было изменить.

Синтаксис

expression. Защита (Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly, AllowFormattingCells, AllowFormattingColumns, AllowFormattingRows, AllowInsertingColumns, AllowInsertingRows, AllowInsertingHyperlinks, AllowDeletingColumns, AllowDeletingRows, AllowSorting, AllowFiltering, AllowUsingPivotTables )

Выражение Переменная, представляющая объект Worksheet .

Параметры

Имя Обязательный или необязательный Тип данных Описание
Password Необязательный Variant Строка, указывающая пароль для листа или книги с учетом регистра. Если этот аргумент опущен, можно снять защиту листа или книги, не используя пароль. В противном случае необходимо указать пароль для отмены защиты листа или книги. Если вы забыли пароль, вы не сможете снять защиту листа или книги.

Используйте надежные пароли, содержащие строчные и прописные буквы, цифры и знаки. В слабых паролях эти элементы не комбинируются. Надежный пароль: Y6dh!et5. Слабый пароль: House27. Длина паролей должна быть не меньше 8 символов. В парольной фразе лучше использовать 14 или более символов.

Очень важно запомнить пароль. Если вы его забудете, корпорация Майкрософт не сможет его восстановить. Храните пароли, записанные на бумаге, в безопасном месте вдали от информации, которую они защищают. DrawingObjects Необязательный Variant Значение true для защиты фигур. Значение по умолчанию — True. Contents Необязательный Variant Значение true для защиты содержимого. Для диаграммы это защищает всю диаграмму. Для листа это защищает заблокированные ячейки. Значение по умолчанию — True. Scenarios Необязательный Variant Значение true для защиты сценариев. Этот аргумент действителен только для листов. Значение по умолчанию — True. UserInterfaceOnly Необязательный Variant Значение true для защиты пользовательского интерфейса, но не макросов. Если этот аргумент опущен, защита применяется как к макросам, так и к пользовательскому интерфейсу. AllowFormattingCells Необязательный Variant Значение True позволяет пользователю форматировать любую ячейку на защищенном листе. Значение по умолчанию — False. AllowFormattingColumns Необязательный Variant Значение True позволяет пользователю форматировать любой столбец на защищенном листе. Значение по умолчанию — False. AllowFormattingRows Необязательный Variant Значение True позволяет пользователю форматировать любую строку на защищенном листе. Значение по умолчанию — False. AllowInsertingColumns Необязательный Variant Значение True позволяет пользователю вставлять столбцы на защищенный лист. Значение по умолчанию — False. AllowInsertingRows Необязательный Variant Значение True позволяет пользователю вставлять строки на защищенный лист. Значение по умолчанию — False. AllowInsertingHyperlinks Необязательный Variant Значение True позволяет пользователю вставлять гиперссылки на защищенный лист. Значение по умолчанию — False. AllowDeletingColumns Необязательный Variant Значение True позволяет пользователю удалять столбцы на защищенном листе, где каждая ячейка удаляемого столбца разблокирована. Значение по умолчанию — False. AllowDeletingRows Необязательный Variant Значение True позволяет пользователю удалять строки на защищенном листе, где каждая ячейка в удаляемой строке разблокирована. Значение по умолчанию — False. AllowSorting Необязательный Variant Значение True позволяет пользователю выполнять сортировку на защищенном листе. Каждая ячейка в диапазоне сортировки должна быть разблокирована или не защищена. Значение по умолчанию — False. AllowFiltering Необязательный Variant Значение True позволяет пользователю задавать фильтры на защищенном листе. Пользователи могут изменять условия фильтра, но не могут включать или отключать автоматический фильтр. Пользователи могут задавать фильтры для существующего автофильтра. Значение по умолчанию — False. AllowUsingPivotTables Необязательный Variant Значение True позволяет пользователю использовать отчеты сводной таблицы на защищенном листе. Значение по умолчанию — False.

Замечания

В предыдущих версиях, если применить этот метод с аргументом UserInterfaceOnly , равным True , а затем сохранить книгу, при повторном открытии книги будет полностью защищен весь лист (а не только интерфейс). Чтобы повторно включить защиту пользовательского интерфейса после открытия книги, необходимо снова применить этот метод, если параметр UserInterfaceOnly имеет значение True.

Если вы хотите внести изменения в защищенный лист, можно использовать метод Protect на защищенном листе, если указан пароль. Кроме того, другой метод — снять защиту листа, внести необходимые изменения, а затем снова защитить лист.

Незащищено означает, что ячейка может быть заблокирована (диалоговое окно Форматирование ячеек ), но включена в диапазон, определенный в диалоговом окне Разрешить пользователям изменять диапазоны , и пользователь отключил защиту диапазона паролем или был проверен с помощью разрешений NT.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Понравилась статья? Поделить с друзьями:
  • Vba excel как узнать если лист
  • Vba excel как узнать длину массива
  • Vba excel как удалять листы
  • Vba excel как удалить часть строки
  • Vba excel как удалить умную таблицу