Elseif被跳过了

时间:2017-09-12 09:06:02

标签: excel vba

我的excel文件中有以下内容

§

编写以下函数

+----------+-------+---------------+
|  Option  | value | VisibleOption |
+----------+-------+---------------+
| Option#1 |       | #Option5      |
| Option#2 |       | #Option6      |
| Option#3 |     3 | #Option7      |
| Option#4 |  1200 | #Option8      |
+----------+-------+---------------+

现在,该函数返回以下内容

Private Sub CommandButton1_Click()

  Dim i                 As Integer
  Dim value_s           As String

    i = 2
    Do Until IsEmpty(Cells(i, 1))
        value_s = ActiveSheet.Cells(i, 2)

        If value_s <> "" Then
            Debug.Print "value_s is not empty"
        ElseIf value_s = "1200" Then
            Debug.Print "value_s contains a 1200"
        Else
            Debug.Print "print the rest"
        End If

    i = i + 1
    Loop

End Sub

虽然它应该返回类似下面的东西,因为存在1200:

print the rest
print the rest
value_s is not empty
value_s is not empty

看来,ElseIf被跳过了。这里出了什么问题?

3 个答案:

答案 0 :(得分:1)

我会写这样的ElseIf指令,我怀疑1200存储为数字,你将它与字符串&#34; 1200&#34;进行比较。这是不一样的。

ElseIf value_s = 1200 Then

答案 1 :(得分:1)

如果语句在第一次成功的IF之后关闭,那么在你的实例中,只有当值为空时它才会到达else,在这种情况下它会跳过它...所以它永远不会调用它。为了解决这个确切的例子,我会改变一下:

If value_s == "" Then
        Debug.Print "print the rest"
    ElseIf value_s = "1200" Then
        Debug.Print "value_s contains a 1200"
    Else
        Debug.Print "value_s is not empty"
    End If

更好的方法是:

Select Case value_s
    Case ""
        Debug.Print "print the rest"
    Case "1200"
        Debug.Print "value_s contains a 1200"
    Case Else
        Debug.Print "value_s is not empty"
End Select

在这种情况下,您可以根据需要添加任意数量的可能性。

答案 2 :(得分:0)

将此添加到您的循环中:

debug.print ActiveSheet.Name
debug.print value_s

您将在即时窗口中获得结果,您可以相应地进行修复。