Vba Case只返回Else语句
当我运行case时,它只为每一行返回Else语句。我知道这个案例应该有效,因为当我在像“D2”这样的一个单元格上测试它时,它只返回正确的数据。只有当我尝试在循环中使用这种情况时,我才能得到所有的零。我试过研究一些东西,但未能使代码正常工作。然而,我对VBA非常陌生,因为在收到这个项目之前,我只有一些JavaScript的简单经验。。。请帮忙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
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),不必客气。当你的声望提高到足以解锁投票能力时,不要忘记对你认为有助于让其他人更容易找到答案的答案进行投票。谢谢。这是一个有意义的解释。