我写在Excel中VBA的脚本与If
和ElseIf
报表数据库检索。该搜索是通过UserForm
具有两个字段进行的,标记为Country
和Category
和在脚本定义如下:如果声明VBA
Dim country As String
Dim Category As String
country = Sheets("Results").Range("D5").Value
Category = Sheets("Results").Range("D6").Value
的信息被搜索和在相对于该国的呈现搜索,并且同样地,所述搜索运行所需的最小值是Country
由用户提供的数据库中的国家/地区提供。
以用户输入的标准,则搜索通过数据在一个叫Database
片和糊剂在另一片的结果称为Results
表运行。根据搜索条件,脚本将运行If
声明中规定的几个选项。
OPTION 1 - 用户提供一个国家和一个类别和:
- 的
country
存在于数据库中,但; - 的
Category
不存在针对特定国家。
在这种情况下,MsgBox
会弹出,说用户提供的国家和类别的特定组合不存在于数据库中。该消息将询问用户是否希望针对所提供的国家/地区的所有条目进行搜索,在这种情况下。我已经写相应代码如下:
finalrow = Sheets("Database").Range("A200000").End(xlUp).Row
For i = 2 To finalrow
If Sheets("Database").Cells(i, 1) = country And _
(Category <> "" Or Sheets("Database").Cells(i, 3) <> Category) Then
Dim question As Integer
question = MsgBox("Unfortunately, the Database has no sources regarding " & Category & " in " & country & ". Would you perhaps want to broaden your search and see all sources regarding " & country & "?", vbYesNo + vbQuestion, "Empty Sheet")
If question = vbYes Then
Sheets("Results").Range("D6").ClearContents
Category = Sheets("Results").Range("D6").Value
boolRestart = True
Else
Sheets("Results").Range("D5").ClearContents
Sheets("Results").Range("D6").ClearContents
Me.Hide
WelcomeForm.Show
Exit Sub
End If
OPTION 2 - 用户提供了country
和:
- 的
country
存在于数据库中和; - 用户还提供了一个
Category
存在于数据库中为特定国家或; - 用户已经离开了
Category
字段为空。
在这种情况下,搜索将运行。这是写在脚本如下:
ElseIf Sheets("Database").Cells(i, 1) = country And _
(Sheets("Database").Cells(i, 3) = Category Or Category = "") Then
'Copy the headers of the "Database" sheet
With Sheets("Database")
.Range("A1:I1").Copy
End With
Sheets("Results").Range("B10:J10").PasteSpecial
'Copy the rows of the table that match the search query
With Sheets("Database")
.Range(.Cells(i, 1), .Cells(i, 9)).Copy
End With
Sheets("Results").Range("B20000").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats
End If
我试图写在几个不同的方式脚本,但搜索引擎不断不工作,我想。现在的情况是,当我输入一个Country
,我知道要在数据库中,无论输入Category
以及与否,OPTION 1总是触发。我曾试图取出OPTION 1干脆用选项运行只是一个If
声明2因为是和搜索运行正常与Country
填写并与两个Country
和Category
填写。但是,只要OPTION 1在代码中,无论用户输入什么内容,这总是选项运行。
完整的代码是在这里,供大家参考:
Dim country As String 'Search query country, user-inputted
Dim Category As String 'Search query category user-inputted
Dim finalrow As Integer
Dim i As Integer 'row counter
Dim ws As Worksheet
Set ws = Sheets("Database")
country = Sheets("Results").Range("D5").Value
Category = Sheets("Results").Range("D6").Value
finalrow = Sheets("Database").Range("A200000").End(xlUp).Row
For i = 2 To finalrow
If Sheets("Database").Cells(i, 1) = country And _
(Category <> "" Or Sheets("Database").Cells(i, 3) <> Category) Then
Dim question As Integer
question = MsgBox("Unfortunately, the Database has no sources regarding " & Category & " in " & country & ". Would you perhaps want to broaden your search and see all sources regarding " & country & "?", vbYesNo + vbQuestion, "Empty Sheet")
If question = vbYes Then
Sheets("Results").Range("D6").ClearContents
Category = Sheets("Results").Range("D6").Value
boolRestart = True
Else
Sheets("Results").Range("D5").ClearContents
Sheets("Results").Range("D6").ClearContents
Me.Hide
WelcomeForm.Show
Exit Sub
End If
ElseIf Sheets("Database").Cells(i, 1) = country And _
(Sheets("Database").Cells(i, 3) = Category Or Category = "") Then
'Copy the headers of the "Database" sheet
With Sheets("Database")
.Range("A1:I1").Copy
End With
Sheets("Results").Range("B10:J10").PasteSpecial
'Copy the rows of the table that match the search query
With Sheets("Database")
.Range(.Cells(i, 1), .Cells(i, 9)).Copy
End With
Sheets("Results").Range("B20000").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats
End If
Next I
非常感谢您的帮助。
编辑后的版本不起作用。您的原始版本将会。更好的是,在选项1中完全消除'Category'和''“''之间的比较 - 在这里将'Category'与用户输入进行比较就足够了。 – bobajob
谢谢你的帮助!我已经这样做了,最终结果是一样的。无论用户输入如何,选项1仍然被触发。 – franciscofcosta