Имя: Пароль:
1C
1С v8
Защита ячеек excel
0 YurAnt
 
18.12.15
14:45
Доброго времени суток, господа-форумчане.
Перегреваюсь уже видимо...
Имеется Бухгалтерия предприятия КОРП, редакция 2.0 (2.0.64.41)
на платформе 8.3 (8.3.6.2390)

Задача такова: нужно программно защитить диапазон ячеек в документе excel

Проблема 1:

Sheet = Book.WorkSheets(ИмяЛиста);
Sheet.Cells.Locked = Истина;
   //Sheet.Cells(1, 1).Locked = Ложь;
Sheet.Range("A5:C10").Locked = Ложь;
Sheet.Protect("123",1,1,1);

Не отрабатывает, лочит весь лист.

Проблема 2:
Возможно ли сделать аналогичную защиту если документ уже открыт пользователем?

Благодарен за любые советы,
С ув. YurAnt.
1 YurAnt
 
18.12.15
15:02
PS excel 2010

неужели никто не озадачивался блокировкой ячеек/листов открытых экземпляров документа?
2 Garykom
 
гуру
18.12.15
15:04
(1) зачем ексель нужен?
3 mehfk
 
18.12.15
15:05
(0) Сделай запись макроса для первой проблемы и посмотри исходный код.
4 Garykom
 
гуру
18.12.15
15:05
(2)+
а то тут одна умная сеть автозаправок прислала заполнить вопросник типа 200 бонусов дадим...

только xlsx с каким то activex внутри, на моем 2003 офисе нифига не работает (хотя и открылось)

и как это заполнять?
5 Мэс33
 
18.12.15
15:07
(4) разреши запуск макросов - ищи в параметрах настройки безопасности.
6 Garykom
 
гуру
18.12.15
15:08
(5) не пойдет, там "ошибка activex" тупо нет такого контрола что засунули в док
7 Garykom
 
гуру
18.12.15
15:09
(6)+ и это не считая проблем с безопасностью, вот же олени
8 Мэс33
 
18.12.15
15:09
(0) Нет просто защиты ячейки.
Есть защита ячейки. Но некоторые ячейки можно запретить запрещать.
То есть программно надо на некоторых ячейках снять запрет.

    Selection.Locked = False
    Selection.FormulaHidden = False

На этих ячейках защита не установится, на остальных (всех) - установится защита.
9 Мэс33
 
18.12.15
15:12
Sheet = Book.WorkSheets(ИмяЛиста);
Sheet.Range("A5:C10").Locked = Ложь; // где не надо, чтобы была защита
Sheet.Protect("123",1,1,1);
10 KnightAlone
 
18.12.15
15:13
Попытка
                            Excel = Новый COMОбъект("Excel.Application");
                        Исключение
                            Сообщить("Не удалось инициализировать Excel");
                        КонецПопытки;
                        Состояние("Преобразую файл ... ");
                        Попытка
                            ФайлExcel = Excel.Workbooks.Open(ПутьКФайлуФыгрузки);
                            ЛистExcel = ФайлExcel.ActiveSheet;
            ЛистExcel.Range("V2:X4").locked = False;
                            ЛистExcel.Range("T5:U5").locked = False;
                            ЛистExcel.Range("W5:X5").locked = False;
                            ЛистExcel.Cells(2, 27).locked = False;
                            ЛистExcel.Cells(3, 27).locked = False;
        Иначе
                            
                                ФайлExcel.ActiveSheet.Protect("---");
                                            
                            Excel.DisplayAlerts = True;
                            ФайлExcel.Windows(1).TabRatio = 0.500;
                            
                            ФайлExcel.Save();
11 KnightAlone
 
18.12.15
15:16
Иначе и Попытка - лишние, кусками кидал, но суть понятна вроде
12 dk
 
18.12.15
15:16
(0) Ты интерактивно то может сделать то что хочешь программно? Макросы?