Я пишу скрипт в Excel VBA, который выполняет поиск в базе данных страны с учетом введенных пользователем критериев. Поиск исчерпан из UserForm
, который учитывает поиск пользователя из трех полей поиска. Помимо «Страны», пользователь также может сузить поиск, указав интересующую его «Категорию информации» и «Подкатегорию информации». Все эти поля ComboBox
связаны со списками. Некоторыми примерами категорий и подкатегорий являются «География», «Экономические показатели», «СМИ», «Статистика населения» и другие. В зависимости от критериев, предоставленных пользователем, скрипт либо вернет результаты поиска — если есть какие-либо совпадения с базой данных — либо, альтернативно, MsgBox
уведомит, что поиск не нашел совпадений. Мне было интересно, является ли текст, представленный в MsgBox
, фиксированным или он может зависеть от переменных, введенных пользователем.
Для пояснения возьмем в качестве примера пользователя, который ищет информацию о США и выполняет поиск только с этим критерием. База данных содержит информацию о США и возвращает всю доступную информацию. Несмотря на все данные, пользователь конкретно хочет получить информацию о СМИ в США и повторяет поиск по этим двум критериям. Однако в базе нет информации конкретно по США и СМИ. В этом случае сценарий возвращает MsgBox
, который, согласно моему коду на данный момент, который работает нормально, просто говорит, что «В базе данных нет информации, соответствующей этому поиску».
У меня вопрос: может ли MsgBox
вернуть сообщение, зависящее от пользовательского поиска, то есть, в примере, вернуть что-то вроде «Нет информации о СМИ в США»? Большое спасибо за Вашу помощь.
Это код, который запускает поиск:
country = Sheets("Results").Range("D5").Value
Category = Sheets("Results").Range("D6").Value
Subcategory = Sheets("Results").Range("D7").Value
finalrow = Sheets("Database").Range("A200000").End(xlUp).Row
For i = 2 To finalrow
'If the country field is left empty
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
'If the country field is filled in and there results from the search made
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
'Copy the headers of the table
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
ElseIf Sheets("Database").Cells(i, 1) = country And _
(Sheets("Database").Cells(i, 3) <> Category) Then
MsgBox "The database has no information that matches this search."
Sheets("Results").Range("D5").ClearContents
Sheets("Results").Range("D6").ClearContents
Sheets("Results").Range("D7").ClearContents
Exit Sub
End If
Next i