Если затем инструкция ElseIF в Excel VBA

Я пишу скрипт, который запускает поиск в базе данных. Он делает это с оператором IF, который имеет несколько условий, которые зависят от пользовательского ввода в трех разных полях («страна», «категория» и «подкатегория»). Я определил их ранее.

Различные комбинации ввода пользователем в трех полях будут давать разные результаты. Таким образом, например, если пользователь не предоставляет «страну», то поиск не будет запущен и появится сообщение об ошибке:

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 (чтение «В базе данных нет такой страны. Пожалуйста, найдите информацию, относящуюся к другой стране».).

Весь код с двумя дополнительными инструкциями выглядит следующим образом:

 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 

Есть ли у вас какое-то представление о том, что я могу делать неправильно, когда добавляю два дополнительных заявления? Спасибо вам за помощь.

Когда у вас есть только два первых блока If / ElseIf , цикл запускается до тех пор, пока он не попадет в строку, где второе условие оценивается как True и выполняет второй блок. В остальное время ничего не выполняется.

Когда вы включаете третий блок, страна (скорее всего) не будет соответствовать в первой строке, поэтому она даст вам сообщение о том, что страна не находится в базе данных (хотя на самом деле это не только в текущей строке).

Я бы .Find в стране, используя. .Find сначала и .Find если совпадения не найдено, а затем выполните поиск. Идеальный способ будет зависеть от ваших данных (есть много ожидаемых совпадений и т. Д.),

Такая же логика применяется к последнему блоку, хотя это вызовет проблему только после того, как страна будет найдена, но с другой категорией. Вероятно, проще всего просто выполнить поиск и проверить, были ли какие-либо матчи после этого. Если нет, вы можете отправить сообщение.

  • Условное форматирование с использованием аргумента if
  • countifs named range дает ошибку #VALUE
  • Excel Если числа заканчиваются на '00'
  • Python / Excel: сравнить заданное значение с суммарным значением
  • Вложенная формула IF
  • Получение номеров строк в диапазоне SUMIF из разных ячеек
  • INDEX, MATCH два критерия, причем один из этих критериев условный ... где идет IF?
  • Выпуск VBA My IF заканчивается после нахождения одной итерации
  • Формула Excel, которая проверяет столбцы и подсчитывает значения
  • Сделать ячейку excel равной определенной величине из другой ячейки
  • Формула для диапазона чисел равна числу в ячейке на другом листе
  • Interesting Posts
    Давайте будем гением компьютера.