我寫在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