如果然后ElseIF语句在Excel VBA中

我正在编写一个运行数据库search的脚本。 它是通过一个具有几个条件的IF语句来实现的,这些条件依赖于三个不同字段(“国家”,“类别”和“子类别”)中的用户input。 我之前已经定义了这些。

用户在三个字段中input的不同组合会产生不同的结果。 因此,例如,如果用户不提供“国家”,则search将不会运行,并且将popup错误消息,如下所示:

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 

如果用户提供了一个国家,则search运行,显示或多或less的结果取决于用户是否还提供了类别和子类别:

 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语句,脚本运行良好,并从数据库search结果。 但是,当我添加这两个语句时,只从第三个If语句(读“数据库中没有这样的国家,请search与另一个国家有关的信息”)的MsgBox显示。

整个代码和另外两个声明如下:

 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 

当我添加两个额外的语句时,你有什么想法可能会做错吗? 感谢您的帮助。

如果只有两个If / ElseIf块,则循环运行,直到第二个条件评估为True并执行第二个块为止。 所有其他时间没有执行。

当你包含第三个块时,国家将(很有可能)在第一行中不匹配,所以它会给你这个国家不在数据库中的消息(虽然它实际上只是不在当前行中)。

我会search国家使用。find第一个和退出如果没有find匹配,然后进行search。 理想的方式将取决于您的数据(有很多预期的匹配等)

同样的逻辑适用于最后一个街区,尽pipe一旦发现国家但只有一​​个不同的类别,这只会导致一个问题。 这可能是最简单的做search,并检查之后是否有任何匹配。 如果没有,你可以给消息。