Страницы: 1
RSS
При расчете в VBA не учитывается IF...Else
 
Здравствуйте! Подскажите, пожалуйста, в чем проблема. Есть программа, которая должна рассчитать зарплату за изготовление и монтаж окон/дверей. При расчете в UserForm2 результат получается один и тот же не зависимо от выбранных данных (та же история и с UserForm3). Это происходит из-за того, что программа почему-то не видит оператор If. Всю голову сломала, а как это исправить так и додумалась. Помогите, пожалуйста!
 
STF, приведите пример вводимых данных, при которых расчет идет не так, как предполагается.
Установите надстройку IndenterVBA например отсюда: http://www.cyberforum.ru/vba/thread713645.html и приведите код в более читаемый вид, например
Код
  If UserForm1.ComboBox4.ListIndex = 0 Or UserForm1.ComboBox4.ListIndex = 1 And UserForm3.ComboBox5.ListIndex = 0 Then
    Ovrd = Worksheets("ЗП").Range("C14")
  Else
    If UserForm1.ComboBox4.ListIndex = 0 Or UserForm1.ComboBox4.ListIndex = 1 And UserForm3.ComboBox5.ListIndex = 1 Then
      Ovrd = Worksheets("ЗП").Range("C13")
    Else
      If UserForm1.ComboBox4.ListIndex = 0 Or UserForm1.ComboBox4.ListIndex = 1 And UserForm3.ComboBox5.ListIndex = 2 Then
        Ovrd = Worksheets("ЗП").Range("C13:C14")
      Else
        If UserForm1.ComboBox4.ListIndex = 2 And UserForm3.ComboBox5.ListIndex = 0 Then
          Ovrd = Worksheets("ЗП").Range("C16")
        Else
          If UserForm1.ComboBox4.ListIndex = 2 And UserForm3.ComboBox5.ListIndex = 1 Then
            Ovrd = Worksheets("ЗП").Range("C15")
          Else
            If UserForm1.ComboBox4.ListIndex = 2 And UserForm3.ComboBox5.ListIndex = 2 Then
              Ovrd = Worksheets("ЗП").Range("C15:C16")
            Else
              Ovrd = 0
            End If
          End If
        End If
      End If
    End If
  End If
Возможно, Вы не учитываете приоритет операторов - And выполняется перед Or.
Если выполнится строка Ovsho = Worksheets("ЗП").Range("C19:C20")
, Ovsho будет содержать массив и строка
Zpo = (((M + D) * B * H * Z) + ((Ovro + Ovsho) * Z) + Io + Ist + Nst) вызовет ошибку.
Изменено: Казанский - 14.12.2016 09:56:06
 
Казанский, Зачем так сложно?
Код
If ...
  Else
    If ...
Нельзя ли:
Код
If ...
ElseIf ...
ElseIf...
End If
?
А проще всего:
Код
Select True
  Case UserForm1.ComboBox4.ListIndex = 0 Or UserForm1.ComboBox4.ListIndex = 1 And UserForm3.ComboBox5.ListIndex = 0
    ...
  Case UserForm1.ComboBox4.ListIndex = 0 Or UserForm1.ComboBox4.ListIndex = 1 And UserForm3.ComboBox5.ListIndex = 1
    ...
End Select
There is no knowledge that is not power
 
Цитата
SuperCat написал:
Зачем так сложно?
Не ко мне вопрос - это код из файла ТС, просто с отступами. С ElseIf логика будет другая - может, то, что нужно ТС, а может нет.
Select Case True - это тот же самый If-ElseIf-ElseIf..., только в немного обфусцированной форме. Не проще.
 
Казанский, спасибо, за подсказки. Буду разбираться.
 
Цитата
STF написал:
программа почему-то не видит оператор If
При выполнении условия ПЕРВОГО (верхнего) If, остальные (вложенные в него) соответственно пропускаются.
Объясните нужную логику обычными словами, без привязки Вашему коду
Согласие есть продукт при полном непротивлении сторон
Страницы: 1
Наверх