VBA, строковые аргументы в UDF, которые не имеют кавычек - как получить доступ к их значению? - PullRequest
0 голосов
/ 19 сентября 2018

Моя функция в VBA:

Function myFunc(a)
    myFunc = a    
End Function

Когда я использую эту функцию в листе Excel таким образом =myFunc("abc"), она работает, но когда я использую формулу без пары кавычек =myFunc(abc), тогда я получаю ошибку #NAME?.

Попытка изменить аргумент с Function myFunc(a) на Function myFunc(chr(34) & a & chr (34) ) приводит к ошибке Expected: ).

Как получить доступ к значению, которое было введено без кавычек в пользовательской функции (пользовательская функция)?

Обновление: мне нужно, чтобы упростить использование UDF для конечного пользователя.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Не знаю, зачем вам что-то подобное. Но это возможно !Читайте о Application.Caller - там, где работает UDF.

 Private Function myFuncCalc(ByVal xstr As String)
 ' it is your main function to calculate what you want
 ' just sample code to test below
   If xstr = "USD" Then
    myFuncCalc = "yes it's american dollar!"
   Else
    myFuncCalc = "it's no american dollar"
   End If
 End Function

 Function myFunc(a)
 ' function just to be available in worksheet
 ' and extracting currency letter codes from formula between brackets
   bra1 = InStr(Application.Caller.Formula, "(")
   bra2 = InStr(Application.Caller.Formula, ")")
   x = Mid(Application.Caller.Formula, bra1 + 1, bra2 - bra1 - 1)
   myFunc = myFuncCalc(x)
 End Function

Вуаля!

0 голосов
/ 19 сентября 2018

Если вы используете его без кавычек, Excel ожидает именованный диапазон.Если вы хотите получить содержимое из другой ячейки, вы должны определить аргумент как myfunction(a as Range), а затем получить его значение, используя a.Value2 или a.Text.

...