Как защитить запрос Power Query от изменений
Ситуация довольно распространенная с появлением Power Query: создали запрос, в котором выполняются "хитрые" операции и книга с запросом распространяется между пользователями(или высылается заказчику, клиенту и т.п.). Но есть проблема: нам необходимо, чтобы пользователи не могли зайти в запрос и посмотреть действия и тем более изменить там что-либо. Те, кто знаком с VBA знают, что макросы можно "закрыть" паролем(Как защитить проект VBA паролем), но для запросов такой возможности нет. Как же быть? Неужели разработчики Microsoft не предусмотрели возможности защитить запросы? Предусмотрели и все гораздо проще, чем может показаться.
Идем на вкладку
Все, запросы защищены. Теперь ни зайти в запрос и просмотреть его текст, ни изменить запрос или его настройки будет невозможно.
Но при этом запрос будет обновляться как и раньше - т.е. конечный пользователь никак не пострадает.
Правда, следует учитывать
- защита накладывается на все запросы в книге. Защитить один конкретный запрос не получится
- такая защита защищает не только запросы, но и структуру книги(без этого защита не устанавливается). Это означает, что нельзя будет добавлять, удалять, перемещать, скрывать/отображать и переименовывать листы. Но с другой стороны вполне логично: ведь результаты запросов могут быть выгружены на листы книги и удаление такого листа является вмешательством в параметры запроса(параметры загрузки результата)
Будем надеяться, что в будущем появится возможность защищать если не каждый запрос в отдельности, то хотя бы запросы отдельно от всей книги. Хотя, с озвученными выше нюансами это будет сложно сделать.
Например, идет подключение к папке с файлами и дальнейшая обработка. Папка у каждого пользователя своя и обычно мы просто говорили пользователю зайти в параметры запроса и изменить там параметры источника данных. В данном случае я рекомендую воспользоваться советом из этой статьи: Относительный путь к данным PowerQuery. Если путь никак не зависит от расположения книги с запросом, то можно просто создать таблицу параметров без всяких формул, а пользователь должен будет просто записывать туда руками путь к нужной папке - принцип работы запроса от этого не поменяется. Он будет брать путь из ячейки и изменять сам запрос не будет необходимости.
Если вдруг кому-то пригодиться, то ниже приведен код защиты структуры книги кодом VBA(используется пароль 123):
Sub ProtectWorkbook() ActiveWorkbook.Protect Structure:=True, Windows:=False, Password:="123" 'а строка ниже - снятие защиты 'ActiveWorkbook.Unprotect Password:="123" End Sub |
Статья помогла? Поделись ссылкой с друзьями!
