我正在编写一个运行数据库搜索的脚本。它通过一个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
当我添加另外两个语句时,您是否知道我可能做错了什么? 谢谢你的帮助。
答案 0 :(得分:2)
当你只有两个第一个If
/ ElseIf
块时,循环运行直到它到达第二个条件计算为True
并执行第二个块的行。所有其他时间都没有执行任何事情。
当您包含第三个块时,该国家/地区(很可能)在第一行中不匹配,因此它会向您显示该国家/地区不在数据库中的消息(尽管它实际上不在当前行中)
我会首先使用.Find
搜索国家/地区,如果找不到匹配则退出,然后进行搜索。理想的方式取决于您的数据(有许多预期匹配等)
同样的逻辑适用于最后一个块,尽管只有在找到国家但具有不同类别时才会出现问题。这可能是最容易进行搜索并检查之后是否有任何匹配。如果没有,您可以给出消息。