Итак, ваша проблема в том, что вы помещаете InputBox()
функции в вашу UDF.Хотя вы, безусловно, можете это сделать, это по существу сводит на нет цель использования UDF для начала.
Подумайте о том, чтобы поместить в UDF аргумент, который извлекает данные из рабочего листа, а не каждый раз запрашивать ввод данных пользователем.происходит повторный вызов.Или создайте глобальную переменную, которая будет оставаться активной, пока рабочая таблица открыта.
Использование аргументов UDF
Если у вас была UDF, которая выглядела так:
Public Function myUDF()
Dim myInput As String
myInput = InputBox("Type Something")
myUDF = myInput & "!"
End Function
Выможно добавить аргумент, который будет вытягивать ваш myInput
из таблицы вместо:
Public Function myUDF(myInput As String) As String
myUDF = myInput & "!"
End Function
, который на вашем листе будет выглядеть следующим образом:
=myUDF(A1) 'Where A1 is your new `myInput` argument
Использование глобальных переменных
Вы также можете использовать глобальную переменную, которая будет получать ваш ввод только тогда, когда вы захотите ее изменить.Возможно, вы можете создать командную кнопку, которую вы будете нажимать, чтобы запросить ввод, или, если вам потребуется только один раз - вы можете использовать событие Workbook_Open()
для установки этой переменной - или их комбинацию.
Итак, в верхней части стандартного модуля вы можете добавить свою глобальную переменную:
Public glbVarStr As String
И тогда вы просто запустите любую Sub
, чтобы установить глобальную переменную:
' Since this is a WORKBOOK event, you would need to place this sub in
' your workbook's code module
Private Sub Workbook_Open()
glbVarStr = Inputbox("Type Something")
End Sub
, который вы затем добавите в свой UDF:
Public Function myUDF() As String
myUDF = glbVarStr & "!"
End Function