如果在Excel VBA中使用ElseIF语句

时间:2016-11-18 11:17:38

标签: excel vba excel-vba if-statement

我正在编写一个运行数据库搜索的脚本。它通过一个IF语句来实现,该语句具有几个条件,这些条件取决于三个不同字段中的用户输入(" country"," category" && 34; subategory") 。我以前定义了这些。

用户在三个字段中输入的不同组合将产生不同的结果。因此,例如,如果用户未提供"国家",则搜索将不会运行并将弹出错误消息,如下所示:

For i = 2 To finalrow

    If country = "" Then
        Sheets("Results").Range("B10:J200000").Clear
        MsgBox "You must select a country in order to search the database. Please do so in the drop-down list provided."
        Sheets("Results").Range("D5").ClearContents
        Sheets("Results").Range("D6").ClearContents
        Sheets("Results").Range("D7").ClearContents
        Exit Sub

如果用户提供了国家/地区,则搜索会运行,显示或多或少的结果,具体取决于具有或未提供类别和子类别的用户:

ElseIf Sheets("Database").Cells(i, 1) = country And _
        (Sheets("Database").Cells(i, 3) = category Or category = "") And _
        (Sheets("Database").Cells(i, 4) = subcategory Or subcategory = "") Then

            With Sheets("Database")
            .Range("A1:I1").Copy
            End With
            Sheets("Results").Range("B10:J10").PasteSpecial

            With Sheets("Database")
            .Range(.Cells(i, 1), .Cells(i, 9)).Copy
            End With
            Sheets("Results").Range("B600").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats

    End If

Next I

这一切都很好。

我现在想为另外两种情况向IF语句添加更多条件:

1 - 用户提供数据库中不存在的国家/地区。我写的如下:

ElseIf Sheets("Database").Cells(i, 1) <> country Then
        MsgBox "There is no such country in the database. Please search for information relating to another country."
        Sheets("Results").Range("D5").ClearContents
        Sheets("Results").Range("D6").ClearContents
        Sheets("Results").Range("D7").ClearContents
        Exit Sub

2:用户提供数据库中不存在的国家/地区和数据库的组合。我写的如下:

ElseIf (Sheets("Database").Cells(i, 1) = country) And _
        (Sheets("Database").Cells(i, 3) <> category) Then
        MsgBox "There are no records in the database that match your search criteria. Please try another search"
        Sheets("Results").Range("D5").ClearContents
        Sheets("Results").Range("D6").ClearContents
        Sheets("Results").Range("D7").ClearContents
        Exit Sub

正如我所说,如果没有这两个额外的ElseIf语句,脚本运行正常,并显示数据库搜索的结果。但是,当我添加这两个语句时,只有第三个MsgBox语句中的If(阅读&#34;数据库中没有这样的国家/地区。请搜索与其他国家/地区相关的信息。& #34;)显示。

整个代码以及另外两个语句如下:

For i = 2 To finalrow

If country = "" Then
    Sheets("Results").Range("B10:J200000").Clear
    MsgBox "You must select a country in order to search the database. Please do so in the drop-down list provided."
    Sheets("Results").Range("D5").ClearContents
    Sheets("Results").Range("D6").ClearContents
    Sheets("Results").Range("D7").ClearContents
    Exit Sub

ElseIf Sheets("Database").Cells(i, 1) = country And _
    (Sheets("Database").Cells(i, 3) = category Or category = "") And _
    (Sheets("Database").Cells(i, 4) = subcategory Or subcategory = "") Then

        With Sheets("Database")
        .Range("A1:I1").Copy
        End With
        Sheets("Results").Range("B10:J10").PasteSpecial

        With Sheets("Database")
        .Range(.Cells(i, 1), .Cells(i, 9)).Copy
        End With
        Sheets("Results").Range("B600").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats

    Me.Hide

ElseIf Sheets("Database").Cells(i, 1) <> country Then
    MsgBox "There is no such country in the database. Please search for information relating to another country."
    Sheets("Results").Range("D5").ClearContents
    Sheets("Results").Range("D6").ClearContents
    Sheets("Results").Range("D7").ClearContents
    Exit Sub

ElseIf (Sheets("Database").Cells(i, 1) = country) And _
    (Sheets("Database").Cells(i, 3) <> category) Then
    MsgBox "There are no records in the database that match your search criteria. Please try another search"
    Sheets("Results").Range("D5").ClearContents
    Sheets("Results").Range("D6").ClearContents
    Sheets("Results").Range("D7").ClearContents
    Exit Sub

End If

Next I

当我添加另外两个语句时,您是否知道我可能做错了什么? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

当你只有两个第一个If / ElseIf块时,循环运行直到它到达第二个条件计算为True并执行第二个块的行。所有其他时间都没有执行任何事情。

当您包含第三个块时,该国家/地区(很可能)在第一行中不匹配,因此它会向您显示该国家/地区不在数据库中的消息(尽管它实际上不在当前行中)

我会首先使用.Find搜索国家/地区,如果找不到匹配则退出,然后进行搜索。理想的方式取决于您的数据(有许多预期匹配等)

同样的逻辑适用于最后一个块,尽管只有在找到国家但具有不同类别时才会出现问题。这可能是最容易进行搜索并检查之后是否有任何匹配。如果没有,您可以给出消息。