VBA。在 Select Case 过程中嵌套 if elseif

问题描述 投票:0回答:2

我在 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 值。

请帮忙弄清楚如何使该功能正常工作。

excel vba function if-statement case
2个回答
0
投票

您将 string

"string_indicator1"
作为参数传递给函数参数
indicator
(所以
indicator = "string_indicator1"

在您的 case 语句中,您正在检查

indicator
是否为
string_indicator1
,但这不是字符串,而是变量。该变量可能未定义,因此包含空字符串。由于这不等于
indicator
中的值,因此整个
If-ElseIf...
构造永远不会执行。函数值永远不会被计算,并且函数将始终返回 0(这是 VBA 中的默认值)。

您只需将案例陈述更改为

Case "string_indicator1"

你应该做两件事:

始终在代码顶部使用 Option Explicit(在 VBA 编辑器中,使用“工具”->“选项”,然后在“编辑器”选项卡上,选中“需要变量声明”。

学习使用 VBA 调试器,通过单步执行所有语句来检查代码,这有助于了解代码如何工作以及失败的原因。我建议在此处输入链接描述,但还有数百万个其他教程。


0
投票

我认为首先你需要了解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
上的修改,最后是代码如何分配要返回的输出。

希望可以帮到你

© www.soinside.com 2019 - 2024. All rights reserved.