Excel VBA中的If Then ElseIF语句
我正在编写一个运行数据库搜索的脚本。它是通过一个IF语句来实现的,该语句包含几个条件,这些条件取决于用户在三个不同字段(“国家”、“类别”和“子类别”)中的输入。我以前定义过这些 用户在三个字段中输入的不同组合将产生不同的结果。因此,例如,如果用户未提供“国家”,则搜索将不会运行,并会弹出错误消息,如下所示:Excel VBA中的If Then ElseIF语句,vba,excel,if-statement,Vba,Excel,If Statement,我正在编写一个运行数据库搜索的脚本。它是通过一个IF语句来实现的,该语句包含几个条件,这些条件取决于用户在三个不同字段(“国家”、“类别”和“子类别”)中的输入。我以前定义过这些 用户在三个字段中输入的不同组合将产生不同的结果。因此,例如,如果用户未提供“国家”,则搜索将不会运行,并会弹出错误消息,如下所示: For i = 2 To finalrow If country = "" Then Sheets("Results").Range("B10:J200000")
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 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
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
如果用户提供了国家/地区,则会运行搜索,根据用户是否提供了类别和子类别,显示或多或少的结果:
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-用户提供数据库中不存在的国家/地区。我写的如下:
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 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
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
的行,并执行第二个块。所有其他时间都没有执行任何操作
当您包括第三个块时,国家(很可能)在第一行中不匹配,因此它将向您提供国家不在数据库中的消息(尽管它实际上只不在当前行中)
我会先使用.Find
搜索国家/地区,如果没有找到匹配项,则退出,然后进行搜索。理想的方法取决于您的数据(是否有许多预期匹配等)
同样的逻辑也适用于最后一个区块,尽管这只会在发现该国后导致问题,但类别不同。这可能是最简单的搜索,然后检查是否有任何匹配。如果没有,您可以给出消息。您发起的代码在哪里?似乎这只是一个包含一个国家的刺痛。如果这是正确的,那么您的代码中几乎只允许一个国家:
ElseIf表(“数据库”)。单元格(i,1)=国家和
。因此,单元格(i,1)
必须准确地包含国家/地区的内容
,否则If
语句将不起作用(特别是因为它在逻辑上与和
组合)。因此,您将(应该)始终收到无此类国家/地区的错误消息。我没有将其包括在问题中,因为我认为这会让人困惑。这里是:country=Sheets(“结果”).Range(“D5”).Value category=Sheets(“结果”).Range(“D6”).Value subcategory=Sheets(“结果”).Range(“D7”).Value finalrow=Sheets(“数据库”).Range(“A200000”).End(xlUp).行
正如我所想的那样。因此,基本上,country
获取Sheets(“Results”).Range(“D5”).value
如果此单元格包含USA
,则您的行ElseIf Sheets(“Database”).Cells(i,1)=country和
比较Sheets(“Database”).Cells(i,1)
与USA
。如果它们相等,则您的ElseIf
可以工作(如果满足其他If
情况)。然而,只有美国才会被接受。以下内容不起作用:\u USA
、USA
、USA
、USA
,等等。此外,只接受USA
(无其他国家)。只需添加到上述ArcadeSpecinct的帖子中,在执行.Find
时,我会在执行之前立即关闭调试器,并在执行后立即恢复调试器。Find
-要关闭调试器,请输入On Error resume Next
并恢复调试器(这一点非常重要!)这是错误转到0
-这将避免宏crashing@Jeremy在我看来,更好的选择是使用设置一个范围。找到并检查它是否为无。因为它只执行一次,所以可能的性能提升是不值得的。