2017-10-13 45 views
2

当我运行我的案例时,它仅返回每条线的Else语句。我知道这种情况应该起作用,因为当我在像“D2”这样的一个单元格上测试它时,只有它返回了正确的数据。只有当我尝试在循环内使用这种情况时,我才会得到全零。我已经尝试过研究几件事情,但无法使代码正确工作。然而,我对VBA非常陌生,因为我只有在接受这个项目之前拥有一些JavaScript经验,请帮助。案例仅返回Else语句

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 
+5

内评估您的cases对细胞你不指定任何值ACCTNUM – NineBerry

+0

我必须说实话,我不知道我在做什么,因为这是我第一次每周使用VBA ......我不得不研究并拆解迄今为止的每一段代码。所以请原谅我,如果我像一个愚蠢的问题,像我应该分配给acctNum什么价值?你的意思是像acctNum = XX?我到底在哪里做这个任务? – PonderingOrchid

+0

那么你选择'acctNum'的值的情况下,它位于哪里?在给“结果”赋予一个值之前,你必须首先测试某些东西。 – dwirony

回答

0

我修改了下面的代码,它的工作原理是exp ected。我会建议使用这种类型的工作阵列,但这对于稍后当您更熟悉VBA时需要考虑。

您遇到的错误已被其他人指出,并且我修复了一些您稍后会发现的错误。

对于超过32000的值,你想用龙,而不是整数(它不是完全32000,但如果你在任何地方接近这个数字,只是用龙)

我不认为它使用的价值acctNum所以我把它拿出来了,你Dim'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 
+0

哇!很感谢!它更干净! – PonderingOrchid

+0

不客气。当您的声望高到足以解锁投票能力时,请不要忘记提供您认为有帮助的答案,让其他人更容易找到答案。 –

1

您必须为变量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 

相反,如果你给它的值代码中Select Case部分之前将提供你正在寻找的结果:

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 

希望这有助于:)

+0

请注意,在这里我只给它分配了一个硬编码值'2710'。你可以从单元格中提取该值(例如acctNum = cell.Value) – tmwoods

0

好像你想要的东西像这样:

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 
0

为了帮助您理解误解可能在哪里。

你在说什么Select Case acctNum这意味着每个人case将根据acctNumTrue/ False为基准进行评估。例如:

是否1110评价为True针对acctNum?不...那么下一个案例。

是否2710评价为True针对acctNum?没有...等,直到你打你的其他陈述。

的原因,这些都被作为评估是False因为你没有分配一个值acctNum因此你不是真的评估反对任何。

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

Select Case cells.value - 现在你的account范围

+0

谢谢。这是一个有意义的解释。 – PonderingOrchid