VBA,UDF中没有引号的字符串参数 - 如何访问它们的值?
Posted
技术标签:
【中文标题】VBA,UDF中没有引号的字符串参数 - 如何访问它们的值?【英文标题】:VBA, string arguments in UDF that does not have quotation marks - how to access their value? 【发布时间】:2018-09-19 11:29:07 【问题描述】:我在 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(用户定义函数)中不带引号键入的值?
更新:我需要它来简化最终用户对 UDF 的使用。
【问题讨论】:
我很确定你不能,除非它是例如在你使用 UDF 的工作表中定义的名称。而且我也很确定您不能在“标准”UDF 中使用不带引号的文本。 【参考方案1】:我不知道你为什么需要这样的东西。 但有可能!阅读 Application.Caller - 它是运行 UDF 的 rng。
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
瞧!
【讨论】:
@Viktor:如果 Rafal 的解决方案解决了你的问题,你也应该给他credits【参考方案2】:如果你使用它不带引号,excel 需要一个命名范围。如果您想要从另一个单元格中获取内容,则应将参数定义为myfunction(a as Range)
,然后使用a.Value2
或a.Text
获取其值。
【讨论】:
您好,谢谢您的回答。我正在编写一个函数,用户可以在其中编写货币名称,而不是我的函数将通过银行网站的 API 汇率询问,毕竟函数将返回汇率。我希望我的函数的用户端是这样的:=myFunc(CAD)
,而不是=myFunc("CAD")
。如果我在单独的单元格中写一个货币名称,它将起作用:=myFunc(A1)
你不听吗?这就是我和萨玛正在写的。如果它是一个命名范围,那么没关系,A1 是第 1 行第 1 列中的单元格的名称。但是你不能写 func(CAD)
,因为 Excel 不能将 CAD
解释为字符串。尝试以与使用 UDF 相同的方式使用 Find
。我很害怕,但你想要它是不可能的。
亲爱的@Storax,请不要生我的气 - Rafał B. 的新回答表明,这是可能的。不幸的是,我没有足够的声誉来投票拉法尔的答案。请你投票给他的答案吗?
我为什么要生气?如果您需要类似的东西并且 Rafal 实现了它,请继续。我没有想到。 @Rafal B.:非常好,但正如你所写 我也不知道为什么需要这样的东西以上是关于VBA,UDF中没有引号的字符串参数 - 如何访问它们的值?的主要内容,如果未能解决你的问题,请参考以下文章