2016-11-22 3 views
0

Я пишу скрипт в Excel VBA, который выполняет поиск в базе данных страны с учетом введенных пользователем критериев. Поиск заканчивается UserForm, который рассматривает поиск пользователей из трех полей поиска. Помимо формы «Страна», пользователь может также сузить поиск, указав «Категория информации» и «Подкатегорию информации», которой это интересно. Все эти поля: ComboBox, которые связаны со списками. Некоторыми примерами категорий и подкатегорий являются «География», «Экономические показатели», «Медиа», «Статистика населения» и другие. В зависимости от критериев, предоставленных пользователем, сценарий будет либо возвращать результаты поиска - если есть совпадения с базой данных - или, альтернативно, MsgBox, сообщая, что поиск не найден. Мне было интересно, исправлен ли текст, представленный в 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 
+0

Просьба указать код перед отправкой. спасибо – user1

+0

Я представил код, который я написал. Спасибо. – franciscofcosta

ответ

2

Вы в контроле MsgBox так все, что вам нужно сделать, это правильно обработать вашу логику, чтобы изменить сообщения соответствующим образом.

Один очень легкий путь будет просто изменить эту строку:

MsgBox "The database has no information that matches this search." 

значениями из ваших переменных, как вы упомянули:

MsgBox "There is no information regarding " & Category & " in the " & country & "." 

Предположив Category содержит «Медиа» и country содержит «США» на момент поиска, это будет выводить «В США нет информации о СМИ». как вы ожидали.

Если вам нужны разные шаблоны для ваших сообщений в зависимости от точного значения, введенного пользователем, вам придется работать с более If...Then...Else, чтобы правильно их обрабатывать. Здесь я просто использую заданную фразу и изменяю жестко заданные значения с параметрами.

+0

Спасибо! Это сработало отлично. – franciscofcosta

+0

Я очень рад это слышать. ура –

Смежные вопросы