Vba Case只返回Else语句

Vba Case只返回Else语句,vba,excel,Vba,Excel,当我运行case时,它只为每一行返回Else语句。我知道这个案例应该有效,因为当我在像“D2”这样的一个单元格上测试它时,它只返回正确的数据。只有当我尝试在循环中使用这种情况时,我才能得到所有的零。我试过研究一些东西,但未能使代码正常工作。然而,我对VBA非常陌生,因为在收到这个项目之前,我只有一些JavaScript的简单经验。。。请帮忙 Dim account As Range Dim i As Long Set account = Range("D2:D1100") For Each c

当我运行case时,它只为每一行返回Else语句。我知道这个案例应该有效,因为当我在像“D2”这样的一个单元格上测试它时,它只返回正确的数据。只有当我尝试在循环中使用这种情况时,我才能得到所有的零。我试过研究一些东西,但未能使代码正常工作。然而,我对VBA非常陌生,因为在收到这个项目之前,我只有一些JavaScript的简单经验。。。请帮忙

Dim account As Range
Dim i As Long

Set account = Range("D2:D1100")
For Each cell In account

    If cell.Value Then

        Dim acctNum As Integer, result4 As Integer

            Select Case acctNum

               Case 1110
                    result = 105010

                Case 2710
                    result = 205000

                Case 2750
                    result = 205010

                Case 3110
                    result = 401100

                Case 3115
                    result = 401110

                Case 3120
                    result = 401120

                Case Else
                    result = 0

            End Select
        cell.Offset(0, 1).Value = result
    End If
Next

您必须为变量
acctNum
指定一个值。现在,您只需创建变量,使其在使用时没有值。见下文

Dim acctNum As Integer, result4 As Integer ' You've created the variable here

Select Case acctNum 'And here you're trying to use it but it hasn't been given a value yet
相反,如果您在
选择案例
部分之前给它一个值,您的代码将提供您要查找的结果:

Dim acctNum As Integer, result4 As Integer ' You've created the variable here

acctNum = 2710

Select Case acctNum 'And now the variable has a value and should hit the '2710' case

希望这有帮助:)

似乎您想要这样的东西:

Dim account As Range
Dim i As Long
Dim acctNum As Integer, result4 As Integer

Set account = Range("D2:D1100")

For Each cell In account.Cells

    If Len(cell.Value) > 0 Then
        Select Case cell.Value
            Case 1110
                result = 105010
            Case 2710
                result = 205000
            Case 2750
                result = 205010
            Case 3110
                result = 401100
            Case 3115
                result = 401110
            Case 3120
                result = 401120
            Case Else
                result = 0
        End Select
        cell.Offset(0, 1).Value = result
    End If
Next

我已经在下面修改了你的代码,它可以正常工作。我建议在这类工作中使用数组,但当您对VBA比较熟悉时,您可以在以后研究这一点

其他人已经指出了您所犯的错误,我已经修复了一些您稍后会发现的错误

对于超过32000的值,您希望使用Long而不是Integer(它不完全是32000,但如果您接近该数字,请使用Long)

我认为不值得使用acctNum,所以我把它拿了出来,你把“I”调暗,但不要使用它,所以我也把它去掉了

Dim account As Range
Dim result As Long

Set account = Range("D2:D1100")
For Each cell In account

    If cell.Value Then

        Select Case cell.Value

            Case 1110
                result = 105010

            Case 2710
                result = 205000

            Case 2750
                result = 205010

            Case 3110
                result = 401100

            Case 3115
                result = 401110

            Case 3120
                result = 401120

            Case Else
                result = 0

        End Select
    cell.Offset(0, 1).Value = result
End If
Next

帮助您理解误解可能存在的地方

当您说
Select Case acctNum
时,这意味着每个
Case
都将在
True/False
的基础上根据
acctNum
进行评估。例如:

1110
是否根据
acctNum
评估为
True
?不那么下一个案例

2710
是否根据
acctNum
评估为
True
?不等等,直到你找到你的else语句

这些值都被评估为
False
的原因是,您没有为
acctNum
赋值,因此您没有真正针对任何内容进行评估

正如上面的回答中所述,如果您更改了评估所针对的内容,您将获得预期的输出


Select Case cells.value
-现在,您正在根据您的
帐户范围内的单元格评估您的
案例

您没有为acctNumI分配任何值。老实说,我不知道我在做什么,因为这是我使用VBA的第一周。。。到目前为止,我不得不研究和分解每一段代码。所以请原谅我,如果我问了一个愚蠢的问题,比如我应该赋予acctNum什么价值?你是说acctNum=XX吗?我应该把这个赋值放在哪里?你选择的是
acctNum
值的大小写,那么它在哪里呢?在给
结果
赋值之前,必须先针对某个对象进行测试。好的,这很有意义,我以为我是针对范围(“D2:D1100”)进行测试的。但我想这只适用于会计。所以我需要设置acctNum=Range(“D2:D1100”)?
acctNum=cell.Value
注意,这里我刚刚给它分配了一个硬编码的值“2710”。您可以从一个单元格中提取该值(例如acctNum=cell.value),不必客气。当你的声望提高到足以解锁投票能力时,不要忘记对你认为有助于让其他人更容易找到答案的答案进行投票。谢谢。这是一个有意义的解释。