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.Value2a.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中没有引号的字符串参数 - 如何访问它们的值?的主要内容,如果未能解决你的问题,请参考以下文章

当用户输入超过预期的参数时,强制 VBA 中的 UDF 显示 MsgBox?

vba 如何去掉返回结果两端的双引号?

VBA UDF 多个数组参数

Excel VBA UDF 操作字符串不起作用

如何在vba中的字符串中添加双引号?

Excel VBA UDF 自动完成参数