Страницы: 1
RSS
Если не выполняется ни одно из условий сделать значение ячейки = Ложь
 
Здравствуйте! Написал множество условий, в зависимости от которых меняется значение ячейки H20.

Хотел в конце макроса сделать команду, "если не выполняется ни одно из условий, вывести в ячейке надпись ЛОЖЬ"

Предисловие: До этого создавал Module макросы, которые срабатывали при нажатии кнопок. Там, каждое условие If я закрывал End If

Этот макрос ByVal у меня идет через лист 1. В нем при закрытии каждого условия If, как вроде бы того требуют правила написания, вылезает ошибка "End If without block If". Это я к тому, что здесь как то правила работают по другому, и, соответственно команда else тоже.

Не могли бы подсказать как прописать мою команду.
 
Либо использовать Select Case, либо If ... ElseIf...Else ... End if, либо завести флаг и если выполняется хоть одно из условий, то назначать True. В противном случае он будет False, что и обрабатывать в самом конце новым If ... End if
Это все, что можно сказать по картинке.

P.S. Плохая практика множественные условия писать в одну строку. Лучше каждую делайте внутри If ... End if. И читабельнее будет и не запутаетесь.
Изменено: Дмитрий(The_Prist) Щербаков - 27.02.2020 13:20:49
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий, дело в том, что ваши решения я пробовал делать, но, повторюсь, при макросе ByVal почему то вылезают ошибки на данное оформление условий
 
Цитата
Orishniy написал:
при макросе ByVal
поверьте, не ByVal виноват. Ошибка впрямую говорит чего не хватает: знаний по синтаксису.
Если записали If ... Then в одну строку - то никаких Else ВТОРОЙ строкой быть не может. А в Вашем случае еще и не поможет ничем.
И повторю: по картинкам сказать больше НЕЧЕГО. Выкладывайте код или файл с кодом.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Извольте
Сократил всё, чтобы сделать фокус на конкретном вопросе.

Условий у меня гораздо больше, и хотелось бы, чтобы в случае, если не выполняется ни одно из n числа условий, в ячейке вылазило значение ЛОЖЬ. Иначе он оставляет предыдущее верное значение, при отсутствии прописанного условия
 
Код
Select Case True
Case Range("H22").Value = "Стыковой" And Range("H19").Value = "Труба+труба"
    Range("H20").Value = "св. 25 до 6000 вкл."
Case Range("H22").Value = "Угловой" And Range("H19").Value = "Лист+лист"
    Range("H20").Value = "Плоские детали"
Case Else 'ни одно из перечисленных условий не выполнилось
    Range("H20").Value = False
End Select
хотя я бы повесил это все на событие изменения в ячейке:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    'Ниже идет код для 13) строчки Диаметр деталей в зоне сварки, мм для основной детали Стыковых соединений'
    If Not Intersect(Target, Range("H22", "H19")) Is Nothing Then
        Application.EnableEvents = False
        Select Case True
        Case Range("H22").Value = "Стыковой" And Range("H19").Value = "Труба+труба"
            Range("H20").Value = "св. 25 до 6000 вкл."
        Case Range("H22").Value = "Угловой" And Range("H19").Value = "Лист+лист"
            Range("H20").Value = "Плоские детали"
        Case Else 'ни одно из перечисленных условий не выполнилось
            Range("H20").Value = False
        End Select
        Application.EnableEvents = True
    End If
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий, спасибо за помощь!  Первый вариант кода подошел.

Второй не подошел из за того что у меня значение H20 выбирается в зависимости от 5 условий (вылезла ошибка о числе аргументов), для примера я сократил до двух.  
 
Цитата
Orishniy написал:
в зависимости от 5 условий
Код
If Not Intersect(Target, Range("H22,H19,H29,H30,H31")) Is Nothing Then
адреса от балды нарисовал - подставьте свои
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх