После защиты паролем через библиотеку, макрос перестал работать

Автор Konstanta, 7 февраля 2020, 10:54

0 Пользователи и 1 гость просматривают эту тему.

Konstanta

Приветствую всех жителей форума!
Избитая тема "защиты данных паролем" задаёт новые загадки.
Недобросовестные пользователи внутренней отчётности, которая влияет на премию конкретных сотрудников, узнали что пароль на защиту листа находится в меню Сервис => макросы
и просто снимают его не напрягаясь перебором и прочими техническими штуками.
Естественно я попытался поставить пароль на сам макрос (Сервис=> Управление макросами=> Макросы LibreOffice BASIC=> Управление=> Библиотеки=> Выбираем наш файл с макросами (не стандарт) и вводим пароль.
Всё здорово!
Только теперь при нажатии кнопки макроса выходит сообщение вида:

"Ошибка сценария при выполнении сценария Basic vnd.sun.star.script:VBAProject.Module1.Текст?language=Basic&location=document."

Но если войти в редактор макросов и ввести тот самый пароль, то макрос вполне нормально работает.
Я так полагаю что где-то есть параметр типа "на чтение" или "на исполнение".
Подскажите пожалуйста, кто в курсе: как добиться выполнения макроса, не снимая пароля.

Файлик примера приложен.
Всем Спасибо!



mikekaganski

Тут целая куча проблем.
Во-первых, проекты VBA (VBAProject, то есть те, которые остались после конвертирования из MS Office) вообще не поддерживаются при шифровании. Сохраните макрос в нормальной библиотеке ЛО.

Во-вторых, у запароленных библиотек есть проблемы с локализованными строками (например, решённый баг 57113, а также нерешённый баг с локализованными именами функций - но эта проблема Вас не затронет, если Вы используете русский интерфейс ЛО.)

В третьих, VBASupport, похоже, не работает даже в нормальных библиотеках с паролем.
С уважением,
Михаил Каганский

Konstanta

А есть возможность не хранить пароль в тексте макроса, чтобы он не был виден непосвящённым пользователям?

mikekaganski

Цитата: Konstanta от  7 февраля 2020, 12:08не хранить пароль в тексте макроса

Это о чём? где пароль хранится в тексте макроса? :o
С уважением,
Михаил Каганский

Konstanta

в тексте макроса перед выполнением операций макрос снимает защиту с листа "
ActiveSheet.Unprotect "ПАРОЛЬ"

А после выполнения операций

ActiveSheet.Protect "ПАРОЛЬ"

mikekaganski

С уважением,
Михаил Каганский

Konstanta

В книге масса значений, подгруженных из достоверных источников, которые запрещено менять.
Бывали случаи когда сотрудники (у нас их более 30) "ручками" корректировали себе показатели, чтобы повысить премии.
Выловить это достаточно сложно.
Поэтому редактирование возможно только тех ячеек, которые не защищены (они под контролем находятся)
Простая защита (без пароля) просто отключается.
С паролем работала несколько лет.
Но появилось несколько умников, которые просто смотрят в тексте макроса пароль.

mikekaganski

Я не спрашивал, зачем нужен пароль (пусть даже и слабенький: защита листа - это ерунда, которую может обойти любой желающий, не зная пароля).

Я спрашивал: зачем Вы снимаете пароль в макросе (и затем приходится его возвращать)?
С уважением,
Михаил Каганский

Konstanta

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

Поэтому сначала снимаю защиту, потом обрабатываю ячейки, потом ставлю защиту.
 

mikekaganski

Цитата: Konstanta от  7 февраля 2020, 12:27на защищённом листе макрос не работает, поскольку лист защищён.

Вы пробовали? По крайней мере Ваш макрос прекрасно меняет защищённые ячейки B2 и B3 в ЛО 6.4.0.3, даже если убрать строки со снятием/возвращением пароля.
С уважением,
Михаил Каганский

Konstanta

А вот для меня это новость!!!
Excel так не умеет...
При изменении макросом защищённой ячейки он ругается!
Про Libre этой возможности я просто не знал.
Получается, что можно защитить лист (от дурака) своим паролем и не париться со снятием и постановкой защиты ...
Я попробую более сложные вещи, со скрытием и раскрытием строк, столбов и прочих нюансов
Спасибо огромное, за просвещение!

kompilainenn

Цитата: Konstanta от  7 февраля 2020, 12:20Бывали случаи когда сотрудники (у нас их более 30) "ручками" корректировали себе показатели, чтобы повысить премии.
оффтоп, но вам не кажется, что тут что-то не так? А где контроль за их фактическими показателями со стороны руководителя подразделения?
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

Konstanta

Так на местах "руководители подразделения" и щёлкают клювами, пропуская эти вещи...
А когда выгруженные отчёты попадают в фин-отдел, там уже не видно тех показателей, на которых всё основано.
Потом конечно всё всплывает в итоге, но время уходит и силы тратятся...
Но это уже другая тема :)

Konstanta

При удалении снятия защиты в реальном рабочем файле макрос всё же ругается на то, что невозможно изменить защищённые ячейки.
Так что тема актуальна.

economist

Konstanta - Calc (особенно некотоорые старые версии) - легко обходят все Excel-примочки защиты с паролями листов/книг итп, Sheet().Visible = xlVeryHidden и прочим. Поэтому защитить ничего надежно не получится.

Кроме того, подсунув невалидные данные в ячейки - можно вызвать Runtime Error и перехватить момент снятия защиты.

Все эти защиты - от самого себя. А когда в офисе свирепствует чума KPI или что-то подобное - нужно менять инструмент или не отдавать его на сторону.

Если персонал дорос до автоподбора паролей листов - дойдет и до прямой правки XLS/ODS-файлов. Тут нужно базу данных с правами на уровне движка СУБД и безопасностью на базе ролей. Чаще всего что-то такое уже есть в офисе (1С итп.)
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...