Имеется таблица, которая собирается при помощи Power Query из двух других таблиц (справочников) в этом же файле. Лист на котором содержится эта таблица должен быть защищен - обязательное условие. Но если защитить лист, то пропадает возможность обновлять запрос PQ. Конечный пользователь пароля не знает, а возможность обновлять запрос PQ у него должна быть.
Пожалуйста, подскажите как можно решить данную коллизию?
Даже если такая возможность и была бы, то если у юзера есть возможность обновлять запрос, то есть и возможность открывать и смотреть запрос в редакторе, а значит он все равно увидит этот справочник. Внимание вопрос. Зачем тогда это все? Хотите какой-то иллюзорной защиты, используйте VBA, PQ он немного не про это. И еще имейте в виду одну мудрость, если юзер дурак, то от него и скрывать ничего не надо, он все равно сам все поломает. А если он умный, то при желании вскроет любые ваши справочники парой-тройкой запросов в гугле.
Спасибо за ответ! Смысл не совсем в том чтобы скрыть справочники. Да и то что excel файл вскрывается подручными средствами примерно за 40 секунд ни для кого не секрет. Защищенный лист - это требование (читай ТЗ). В зависимости от того какие поля в справочнике пользователь пометит как "Важно" сформируется таблица для дальнейшей работы. Это итеративный процесс.
И вот задача в том чтобы эта таблица формировалась даже при залоченном листе. Похоже и вправду единственный вариант это VBA, а жаль
Спасибо за ответы! Подскажите пожалуйста по макросу. Проблема в том что через отладчик работает отлично, а через кнопку почему-то лочит страницу раньше чем происходит обновление всех связей. Код ниже
Sub sheet_Upd()
Sheets("Sheet1").Unprotect "123"
For Each objConnection In ThisWorkbook.Connections objConnection.Refresh Next
Sheets("Sheet1").Protect "123", True, True
End Sub
UPD: Разобрался, просто нужно было отключить фоновое обновление. Всем спасибо за участие!
Вернусь к теме. Решил скорректировать макрос и использовать другой подход
Код
Private Sub workbook_open()
Const Pwd = "123"
With Sheets("Лист1")
.Protect Password:=Pwd, AllowFiltering:=True, Scenarios:=False, UserInterfaceOnly:=True
End With
End Sub
Private Sub connections_upd()
For Each objConnection In ThisWorkbook.Connections
objConnection.Refresh
Next
End Sub
Есть 2 проблемы:
При вызове connections_upd у меня вылетает ошибка 400, но только в том случае если сохранить файл предварительно сняв защиту c Лист1. Если открыть файл где Лист1 залочен заранее, то проблема не возникает
При первом вызове connections_upd макрос отрабатывает секунд за 7, а при повторном за считанные мгновения.
Подскажите с чем это может быть связано и как решить?
UPD по вопросу #1: сообщение об ошибке 400 выскакивает без какой либо системы или я ее не вижу.
Anton Bachinin, про первый вопрос не подскажу, а про второй легко: при первом вызове запроса сначала загружаются в память компоненты .NET. Соответственно при повторном выполнении запроса этого не происходит, а сразу обновляется запрос.