Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 1
Регистрация: 16.12.2014
Сообщений: 71

работа с защищенными листами

27.03.2017, 11:39. Показов 1828. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Пытаюсь сделать защиту на листы чтоб данные могли вводиться только через форму ввода.
при попытке использования кода
Private Sub Workbook_Open()
PureBasic
1
2
3
4
For i = 2 To 13
Sheets(i).Protect Password:="ааа", UserInterfaceOnly:=True 'Scenarios:=True,
Next
End Sub
защита работает, форма работает при обращении к активному листу с которого запускалась форма.
при работе макроса с другим листом (входящим в диапазон) выходит ошибка, что лист защищен. При включении "Scenarios" защита не работает вообще.
Или придется включать/отключать защиту при каждом обращении к листу кроме активного?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.03.2017, 11:39
Ответы с готовыми решениями:

работа с листами в excel
Необходимо написать программу, которая объединяет несколько листов в excel (они могут находиться в разных книгах) и удаляет из них...

Работа с листами в Excel
В листе есть 3 колонки. Допустим R3C1,R3C2,R3C3 Можно ли удалить их как-нибудь удалить 1 строчкой кода? Сейчас у меня это выглядит...

Работа с листами в Excel #2
Допустим у меня есть значение и мне нужно проверить есть ли оно в ячейке где R от 1 до конца листа, а С только 1 и нужно вернуть адрес...

7
3946 / 2339 / 790
Регистрация: 02.11.2012
Сообщений: 6,214
27.03.2017, 17:08
в коде снимаете защиту, выполняете код, ставите защиту.
1
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,553
27.03.2017, 17:24
aVlad55,
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub test()
 
    Dim ws As Worksheet
    
    Set ws = ActiveSheet
    
    If ws.ProtectContents Then
        ws.Unprotect "1"
    End If
    
    Cells(1, 1) = "Hallo, World!"
    
    ws.Protect "1"
End Sub
1
13 / 13 / 3
Регистрация: 05.06.2015
Сообщений: 93
28.03.2017, 15:23
Цитата Сообщение от Vlad999 Посмотреть сообщение
в коде снимаете защиту, выполняете код, ставите защиту.
это по колхозному
если выполнение макроса будет прервано, например рученками ctrl+pausebreak или просто отключение макросов, то лист останется без защиты, либо огород городить для учета всех возможностей

у него же все верно написано:
Цитата Сообщение от aVlad55 Посмотреть сообщение
Visual Basic
1
UserInterfaceOnly:=True

однако обращаться к листам по индексу это впринципе не очень хороший вариант...

Цитата Сообщение от aVlad55 Посмотреть сообщение
при работе макроса с другим листом (входящим в диапазон) выходит ошибка, что лист защищен.
индексы могут перестраиваться... ну или не знаю...
для начала сними защиту со всех листов один раз, не ну а вдруг гдето стоит без заветного параметра userinterfaceonly)))
или может в коде запутался, и есть еще где-то...ну вот что-то вроде того, что предложил уважаемый Vlad999
если не поможет, попробуй вот так:
Visual Basic
1
2
3
4
5
6
7
8
9
For each s in thisworkbook.worksheets
    if not strcomp(s.name,"Имя листа, который не надо защищать",vbtextcompare)=0 then 
           'раз индекс листа начинается с 2, то я решил, что
           'защищать надо не все. а еще лучше обращаться по имени обьекта к листам, которые изначально есть в книге
           '(s.codename) его нельзя изменить кодом или пользователем, только рученками. 
           'А индекс - штука странная)
        s.Protect Password:="ааа", UserInterfaceOnly:=True
    end if
next
0
0 / 0 / 1
Регистрация: 16.12.2014
Сообщений: 71
31.03.2017, 14:21  [ТС]
Цитата Сообщение от LEonardo_ Посмотреть сообщение
это по колхозному
если выполнение макроса будет прервано, например рученками ctrl+pausebreak или просто отключение макросов, то лист останется без защиты, либо огород городить для учета всех возможностей
так и есть, только наоборот все становится в защиту и
Цитата Сообщение от Vlad999 Посмотреть сообщение
в коде снимаете защиту, выполняете код, ставите защиту.
перестает работать пока не перезайдешь в файл.
Таки сделал по колхозному через снятие защиты на каждом листе при обращении по индексу. индексы действительно работают непонятно как, у меня они не совпадают с цифрами в VBAProject, но совпадают с порядковыми номера листов в отображении книги. так как имена листов могут меняться то обращение по именам тоже не подходит. кстати вопрос где можно увидеть реальные для екселя имена листов, то что выше назвали
Цитата Сообщение от LEonardo_ Посмотреть сообщение
s.codename
В окне ВБА вижу только названия и какие-то "лист1", "лист2" которые реально не совпадают с используемыми в коде sheets(1), sheets(2).
0
13 / 13 / 3
Регистрация: 05.06.2015
Сообщений: 93
31.03.2017, 15:16
Цитата Сообщение от aVlad55 Посмотреть сообщение
...реальные для екселя имена листов...
Имена обьектов это.
В свойствах они напротив строчки (Name)
И только там их и можно изменить, больше никак. Ни кодом, во время выполнения, ни рученками извне vba.
Из кода можно получить это значение, для обьекта - лист(s) это делается приведенным выше кодом
Visual Basic
1
s.CodeName
ни от индексов ни от названий листов не зависят.
Цитата Сообщение от aVlad55 Посмотреть сообщение
все становится в защиту
Само ничего никуда становится не может. Вот я и говорю, поищите лучше у себя в коде, что именно ставит защиту на лист и сделайте так, чтобы оно работало так как вам нужно.
0
0 / 0 / 1
Регистрация: 16.12.2014
Сообщений: 71
31.03.2017, 15:32  [ТС]
Цитата Сообщение от LEonardo_ Посмотреть сообщение
поищите лучше у себя в коде, что именно ставит защиту на лист
защиту на лист поставил я руками, чтоб пользователи не могли менять там ничего, а пользовались формой ввода, а перебирать листы нужно для формирования сводных отчетов.
по именами листов спасибо за разъяснения. по реальным номерам значит мне работать не получится, так как они идут вразброс и становится трудным перебор. но сейчас я что-то не понял тогда где что. вот у меня так Лист18(3.1), (Name) Лист 18. стоит в книге на 4 позиции и отзывается в коде на обращение sheets(4).
0
13 / 13 / 3
Регистрация: 05.06.2015
Сообщений: 93
31.03.2017, 16:30
защиту на лист поставил я руками
Таак
Давайте разберемся:
В коде у вас совершенно правильно было написано
Visual Basic
1
UserInterfaceOnly:=True
Вы это осмысленно написали?
Знаете за что этот параметр отвечает?
Руками он не может быть установлен!

Добавлено через 7 минут
Visual Basic
1
2
3
4
5
For each s in thisworkbook.worksheets
    On error resume next
    S.unprotect password:="aaa"
    s.Protect Password:="ааа", UserInterfaceOnly:=True
next
Запустить 1 раз для всей книги изменив пароль если он отличается на свой
Думаю это решит описанную вами проблему в начале
А вообще да, лучше разобраться с работой с листами хорошенько.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.03.2017, 16:30
Помогаю со студенческими работами здесь

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

Операции с листами в Excel
Нужно добавить в рабочую книгу 10 листов. Переименовать их. Скрыть все листы, кроме листа с номером N (N ввести с помощью inputbox), а...

Новичок. Помогите разобраться с листами Exсel
Доброго времени суток комрады! Никогда не работал с VBA, в основном прогал на Delphi, в основном процедурным программированием (от того...

Макрос с данными из нескольких таблиц с несколькими листами.
Здравствуйте, может быть вы подскажете мне. У меня такая проблема: Существует n-ое количество книг .xls одинаковой структуры с n-ым...

Макрос в VBA для работы с рабочими листами в Excel
Макрос средствами VBA for Excel В форме ввести шаблон и с помощью операции Like образовать новый рабочий лист, в который переписать все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru