#excel #function #vba #parameters
#excel #функция #vba #параметры
Вопрос:
Я хотел бы получить доступ к информации из API на основе HTTP и манипулировать ею с помощью Excel.
API возвращает около 20 фрагментов информации, и вы можете получить эту информацию, просмотрев любое количество из примерно десяти полей поиска: имя, серийный номер и т.д.
Я хочу написать функцию, аналогичную функции сопоставления в Excel, где один из параметров (в данном случае ТИП СООТВЕТСТВИЯ) имеет несколько возможных значений.
У меня есть список значений (20 фрагментов информации, которые может возвращать API), и я хочу сделать эти фрагменты информации возможными возвращаемыми значениями для одного из параметров функции.
Как мне создать функцию, в которой один параметр имеет список возможных значений? И как мне добавить инструкции всплывающей подсказки к этим параметрам параметров, чтобы люди знали, что это такое?
Комментарии:
1. Так в чем же здесь проблема? Любой UDF может принимать в аргументы несколько значений. Вы можете определить
Enum
для этого и принимать нужные значения. Всплывающие подсказки не могут отображаться для неродных функций (т.е. те, которые не созданы MSFT) любым простым способом. Есть хаки, которые выглядят как всплывающие подсказки, но ничего похожего на то, что вы видите здесь.
Ответ №1:
Вы хотите использовать перечисление.
В части объявлений вашего модуля (перед любыми вспомогательными элементами или функциями) вы можете разместить код, подобный этому.
Enum MyFunctionsArgValue
LessThan
Equal
GreaterThan
End Enum
Это присвоит каждому из этих ключевых слов целочисленное значение, начиная с нуля и заканчивая подсчетом. Так LessThan = 0
, Equal = 1
и GreaterThan = 2
. (На самом деле вы можете начать с любого числа, которое хотите, но по умолчанию обычно все в порядке.)
Теперь вы можете использовать ее в своей функции примерно так.
Function MySuperCoolFunction(matchType as MyFunctionsArgValue)
Select Case matchType
Case LessThan
' do something
Case Equal
' do it different
Case GreaterThan
' do the opposite of LessThan
End Select
End Function
Чтобы получить подсказку, вам нужно использовать нечто, называемое Attribute
. Чтобы добавить ее в свой код, вам нужно экспортировать файл *.bas (или *.cls) и открыть его в обычном текстовом редакторе. После того, как вы ее добавили, вам нужно будет импортировать ее обратно. Эти свойства невидимы изнутри среды разработки VBA. Документация отрывочна (читай «несуществующая»), поэтому я не уверен, что это работает для Enum
, но я знаю, что это работает для функций и переменных, ограниченных модулем.
Функция / вспомогательный
Function MySuperCoolFunction(matchType as MyFunctionsArgValue)
Attribute MySuperCoolFunction.VB_Description = "tool tip text"
Переменная в области модуля
Public someVar As String
Attribute someVar.VB_VarDescription = "tooltip text"
Итак, вы могли бы попробовать это, чтобы увидеть, работает ли это.
Enum MyFunctionsArgValue
Attribute MyFunctionsArgValue.VB_VarDescription = "tool tip text"
LessThan
Equal
GreaterThan
End Enum
Ресурсы