从被调用的函数调用函数时 VBA byref 参数类型不匹配
Posted
技术标签:
【中文标题】从被调用的函数调用函数时 VBA byref 参数类型不匹配【英文标题】:VBA byref argument type mismatch when calling a function from a function being called 【发布时间】:2015-07-18 10:14:30 【问题描述】:希望有人可以提供帮助。这是我正在使用的一组代码的简化。我正在调用一个函数,而该函数又调用了另一个函数。变量从调用子传递到第一个被调用函数,从那里它应该被传递到第二个被调用函数以返回一个值。但是,我在第一个函数中的以下“参数”上收到“byref 参数类型不匹配”错误。有什么建议么?谢谢!
' Sub to call function 1
Sub TestFunctionSelect()
Dim X As Double
' X should = the value of the function mShareMMTDaily as called from mFunctionSelect
X = mFunctionSelect("mShareMMTDaily", "SOL", "2008/02/28", 12)
End Sub
' Function 1 to call function 2 and return a value to the sub
Function mFunctionSelect(FunctionName As String, CompCode As String, CurrentMonth As Date, Parameter As Double) As Double
Select Case FunctionName
' Case Is = "mValue"
' mFunctionSelect = mValue(CompCode, CurrentMonth, Parameter)
Case Is = "mShareMMTDaily"
' This function is called
' I get the "byref argument type mismatch" error on the below "Parameter"
mFunctionSelect = mShareMMTDaily(CompCode, CurrentMonth, Parameter)
End Select
End Function
Function mShareMMTDaily(Code As String, ShareDate As Date, LookBack As Integer) As Double
' Do Stuff
End Function
【问题讨论】:
ByRef arugment type mismatch in Excel VBA的可能重复 将表示日期的字符串“2008/02/28”转换为Date
类型。更多关于类型转换函数here.
感谢@dee 的提示。将相应地标准化我的代码。
【参考方案1】:
您的 Parameter 变量被声明为 Double 并且您将其传递给需要 Integer 的函数。您应该将其转换为:
mFunctionSelect = mShareMMTDaily(CompCode, CurrentMonth, CInt(Parameter))
顺便说一句,正如@dee 指出的那样-您还在将字符串隐式转换为日期。这会降低您的代码安全性,并依赖于您的代码运行所在主机的语言设置。您应该明确转换日期,或者更好的是,从头开始使用日期而不是字符串。
【讨论】:
谢谢@Apokralipsa。那成功了。变量不同的原因是因为 case 语句将从可用函数列表中进行选择——其中一些采用双参数,一些采用整数参数。我希望有办法解决这个问题。现在,我将标准化所有调用函数以使用 double 类型的参数。以上是关于从被调用的函数调用函数时 VBA byref 参数类型不匹配的主要内容,如果未能解决你的问题,请参考以下文章