Страницы: 1
RSS
Защита листа при общем доступе
 
Доброго времени суток.
Наверное тема банальна и проста, но я зашел  в тупик и прошу помощи.

Есть книга xls в ней лист, на листе защищаемые ячейки.
Редактирование ячеек происходит из формы. При открытии читаются данные, при сохранении записываются в ячейки.
Ничего сложного. Защищаю лист кодом:
Код
Sheets("Главная").Protect Password:="1234", UserInterfaceOnly:=True, AllowFormattingCells:=True, AllowFiltering:=True, DrawingObjects:=False 

Все макросы работают.
Открываю общий доступ к книге, тоже работает. Закрываю файл. Открываю файл и макрос больше не работает.
Цитата
При попытке записать в ячейку данные, выдает ошибку. 1004 Эта ячейка находится на защищенном листе.
Что бы внести изменения снимите защиту.
Но при общем доступе защиту не включить и не снять ни вручную ни макросом.

Как победить этот недуг?
Снять защиту с ячеек не вариант, пользователь может внести в ячейку мусор. Нужно только через форму.

Заметил особенность, доступ к ячейкам работает сразу после выполнения :
Код
Sheets("Главная").Protect Password:="1234", UserInterfaceOnly:=True, AllowFormattingCells:=True, AllowFiltering:=True, DrawingObjects:=False 
Если открыть без этого кода - выдают ошибку.

При общем доступе этот код не работает.
Изменено: Mizar - 12.06.2019 10:58:32
 
Добрый день.
Это ограничение книг с общим доступом.
Обойти можно так:
1. Создать в книге вспомогательные имена, их видимость можно скрыть при необходимости, но пользователь итак не сможет менять их штатным способом при общем доступе.
2. Из формы менять не значения защищенных ячеек, а значения этих имён из п.1.
3. В защищенных ячейках использовать значения имен, например: =MyName1 для имени MyName1
Изменено: ZVI - 12.06.2019 22:06:58
 
Это если заранее обработать макросом и переименовать все ячейки на листе, а потом к ним обращаться?
К сожалению этот вариант не подходит.
В таблице некий перечень. Для каждого элемента перечня много ячеек в строке.
Форма вносит данные в эти ячейки. Все очень усложняется. Но если прижмет, может и придется.
Изменено: Mizar - 13.06.2019 09:19:42
 
Цитата
Mizar написал: К сожалению этот вариант не подходит.
Других вариантов нет
Цитата
ZVI написал: Это ограничение книг с общим доступом.
Согласие есть продукт при полном непротивлении сторон
 
Хорошо.
Правильно ли я понимаю, что:
Ячейку я назову например ЯчейкаX1Y1
Чтение я делаю обычным методом Value=cells(x,y)  , а записывать буду  ЯчейкаX & x & "Y" & y = Value , где x y  адрес ячейки.
 
Код
Range("ЯчейкаX1Y1") = UserForm1.TextBox1
Согласие есть продукт при полном непротивлении сторон
 
Спасибо за подсказку.
А как собрать Range("ЯчейкаX1Y1") заменив цифры переменными X  Y, соответствующие адресам ячейки.
Range("ЯчейкаX" & X & "Y" & Y)  будет работать?  
 
Цитата
Mizar написал: Range("ЯчейкаX" & X & "Y" & Y)  будет работать?  
Если X = 1 и Y =1 то для имени 'ЯчейкаX1Y1' все будет работать
Согласие есть продукт при полном непротивлении сторон
Страницы: 1
Наверх