我在 VBA 模块中编写了以下函数作为测试用例。此时该功能仅包含一个“案例”,因为我想测试它,如果成功则填充更多“案例”:
Function Insurn(indicator as String, value as Double)
Select Case indicator
Case string_indicator1
If value >= 11 And value <= 99 Then
asset_val = 5
ElseIf value >= 6 And value <= 10 Or value >= 100 Then
asset_val = 4
ElseIf value >= 0 And value <= 5 Then
asset_val = 3
ElseIf value >= -5 And value < 0 Then
asset_val = 2
ElseIf value >= -14 And value < -5 Then
asset_val = 1
ElseIf value >= -24 And value < -14 Then
asset_val = 0
Else val < -24 Then
End If
End Select
End Function
我应用此函数输入以下数据
Insurn("string_indicator1", 12)
,它返回0值。但是,我希望该函数返回 5。
而且,无论为
value
参数分配什么数字,该函数始终返回 0 值。
请帮忙弄清楚如何使该功能正常工作。
您将 string
"string_indicator1"
作为参数传递给函数参数 indicator
(所以 indicator = "string_indicator1"
)
在您的 case 语句中,您正在检查
indicator
是否为 string_indicator1
,但这不是字符串,而是变量。该变量可能未定义,因此包含空字符串。由于这不等于 indicator
中的值,因此整个 If-ElseIf...
构造永远不会执行。函数值永远不会被计算,并且函数将始终返回 0(这是 VBA 中的默认值)。
您只需将案例陈述更改为
Case "string_indicator1"
你应该做两件事:
始终在代码顶部使用 Option Explicit(在 VBA 编辑器中,使用“工具”->“选项”,然后在“编辑器”选项卡上,选中“需要变量声明”。
学习使用 VBA 调试器,通过单步执行所有语句来检查代码,这有助于了解代码如何工作以及失败的原因。我建议在此处输入链接描述,但还有数百万个其他教程。
我认为首先你需要了解UDF(用户定义函数)是如何工作的。创建 UDF 时,您必须分配一个由 UDF 返回的值。
类似这样的:
Function MYSUM(a As Integer, b As Integer) As Integer
result = a + b
End Function
这将始终返回零,因为我没有分配任何要返回的值。现在检查一下:
Function MYSUM(a As Integer, b As Integer) As Integer
result = a + b
MYSUM = result
End Function
这将按预期工作。第二件事是比较直接字符串/数字或变量。你得到了这一行:
Case string_indicator1
这里
string_indicator1
被称为变量,而不是直接字符串,并且该变量是空的,所以实际上您的代码正在检查空变量。
因此,如果您像
Insurn("string_indicator1", 12)
这样调用您的函数,您可能希望您的代码如下所示:
Function Insurn(indicator As String, value As Double)
'always declare your variables
Dim asset_val As Integer 'or whatever tipe you need
Select Case indicator
Case "string_indicator1"
If value >= 11 And value <= 99 Then
asset_val = 5
ElseIf value >= 6 And value <= 10 Or value >= 100 Then
asset_val = 4
ElseIf value >= 0 And value <= 5 Then
asset_val = 3
ElseIf value >= -5 And value < 0 Then
asset_val = 2
ElseIf value >= -14 And value < -5 Then
asset_val = 1
ElseIf value >= -24 And value < -14 Then
asset_val = 0
End Select
'assign result to function!
Insurn = asset_val
End Function
注意
Case
上的修改,最后是代码如何分配要返回的输出。
希望可以帮到你