Я следовал инструкциям в этой теме:
Как изменить параметры Excel Power Query с помощью VBA
в котором приведен следующий код для изменения параметра Power Query:
ThisWorkbook.Queries([ParameterName]).Formula = 'New code here
Однако он преобразует значение в формулу и добавляет перед ней «=»:
Мне нужно обновить источник моего запроса, потому что срок действия GUID истекает и его необходимо обновить.
Source = Xml.Tables(Web.Contents("http://api.aceproject.com/?fct=getprojects&guid = " & GUID & "&Filtercompletedproject=False&projecttemplate=0&assignedonly=True")),
Единственные решения, которые я могу найти, требуют использования значения, хранящегося в ячейке, но я хочу избежать хранения GUID в ячейке по соображениям безопасности.
Используя VBA, как я могу изменить либо только значение параметра (без преобразования в формулу), либо весь исходный URL-адрес?
Я понимаю это, но я просто ищу «более безопасный», чем хранить его в виде простого текста в ячейке, которую легко увидеть. У меня есть сценарий входа в систему, который обновляет значение GUID при открытии файла, которое автоматически очищается при закрытии файла. Это гарантирует, что следующий пользователь, открывающий файл, не получит доступ к GUID предыдущего пользователя. Это не тема моего вопроса, поэтому я объясню свои доводы в пользу того, что НЕ хочу, чтобы GUID, хранящийся в ячейке, помог вам ответить на мой вопрос, или вы просто придираетесь?
Откуда вы получаете GUID, который вам нужно передать?
Я получаю GUID из API через функцию входа в систему, а затем сохраняю его как переменную класса. Я могу легко манипулировать GUID, проблема заключается в том, чтобы передать его источнику Power Query.
Решение заключалось в использовании двойных кавычек для принудительного ввода текстового значения в формулу:
ThisWorkbook.Queries("GUID").Formula = """dogs"""
Вот окончательная версия, в которой переменная передается как текст:
Sub RefreshQuery_Click()
ThisWorkbook.Queries("GUID").Formula = """" & GUID & """"
End Sub
Чтобы убедиться, что запрос сохраняет свойство параметра, добавьте следующие метаданные:
ThisWorkbook.Queries("GUID").Formula = """" & GUID & """" & " meta [IsParameterQuery=true, Type = ""Text"", IsParameterQueryRequired=true]"
«Я хочу избежать хранения GUID в ячейке по соображениям безопасности» — если этот GUID находится в коде VBA, это небезопасно. Кроме того, этот GUID отправляется по HTTP как часть URL-адреса, что не является безопасным. С этим идентификатором GUID нет серьезных проблем с безопасностью, он уже общедоступен.