VBA, избегайте повторения И внутри оператора IF - PullRequest
0 голосов
/ 22 декабря 2018

Мне нужна помощь с редактированием кода VBA.То, что я пытаюсь сделать, это избегать повторения И внутри утверждения IF.

Пока у меня есть это, и оно работает как шарм.

If Range("B1") <> "MatDescr" And Range("B2") <> "MatDescr" And Range("B3") <> "MatDescr" Then
MsgBox "Column 'B' does not contain MatDescr"
...rest of the code...

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

Dim s As Integer 
For s = 1 To 3
If Cells(s, 2) <> "MatDescr" Then
next s 
rest of the code

Это выглядит намного лучше, но в этом случае VBA видит это утверждение, когда я пытаюсь использовать OR вместо AND,К чему я не стремлюсь.

Ответы [ 4 ]

0 голосов
/ 22 декабря 2018

Вы также можете использовать Match

If IsError(Application.Match("MatDescr", ActiveSheet.Range("B1:B3"),0)) Then MsgBox "Column 'B' does not contain MatDescr"
0 голосов
/ 22 декабря 2018

Может быть оценено как формула массива Excel, например:

If [AND(B1:B3 <> "MatDescr")] Then
0 голосов
/ 22 декабря 2018
If Application.CountIf([B1:B3], "MatDescr") = 0 Then
0 голосов
/ 22 декабря 2018

В данном конкретном случае вы действительно хотите узнать, присутствует ли ваше значение "MatDescr" в диапазоне B1:B3, которое вы можете проверить, используя следующий код.

If ActiveSheet.Range("B1:B3").Find("MatDescr") Is Nothing Then
    MsgBox "Column 'B' does not contain MatDescr"
End If

Я взялсвобода вставлять неявный вызов в ActiveSheet, который вы делаете с помощью неквалифицированных вызовов Range.Метод Range.Find ищет первую ячейку, содержащую целевое значение, и возвращает Nothing, если результат не найден.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...