Возникли проблемы при получении заявления для работы в VBA - PullRequest
0 голосов
/ 22 сентября 2011

Мой первый вопрос: распознает ли Excel VBA оператор if с двумя ограничениями, т.е.

IF Range(somecell).value > 0 AND Range(anothercell).value < 100 Then:
   execute code here

Потому что у меня проблема с получением кода, включенного в оператор if для запуска, когда я знаю, что оба скрипта выполняются в скрипте, который я запускаю. Возможно это проблема с моей логикой.

Я включил код, пожалуйста, посмотрите, можете ли вы указать на какие-либо ошибки в моей логике или VBA. Справочная информация (я также включил некоторые в код):

Есть два рычага, которые меняют ячейку F71 (D40 и D41). Требования состоят в том, чтобы F71 было больше 0, и оно должно быть меньше текущего значения для F71 (сохранено в переменной currentValueAdd).

Таким образом, я перебираю оба слоя, перебирая все возможные комбинации, пытаясь найти оптимальную комбинацию, которая удовлетворяет вышеуказанным условиям. Иногда я открываю Excel, и он работает нормально, а иногда - вообще не работает. Результаты очень ошибочны.

Private Sub OptimizeFI_Click()
  Dim waiveLoop As Integer
  Dim comissionLoop As Integer
  Dim finalWaive As Integer
  Dim finalCommission As Integer
  Dim currentValueAdd As Double

  Dim F71 As Range, D41 As Range

  currentValueAdd = Range("$F$71").Value ' <-- This is the cell I am trying to optimize.

  For waiveLoop = 0 To 7
    Range("$D$40").Value = waiveLoop ' <-- one of the levers in changing cell F71

    For comissionLoop = 0 To 7
      Range("$D$41").Value = comissionLoop ' <-- a second lever in changing cell F71
      If Range("$F$71").Value > 0 And Range("$F$71").Value < currentValueAdd Then
        finalWaive = Range("$D$40").Value
        finalComission = Range("$D$41").Value
        Range("$E$27").Value = finalWaive * 0.05
        Range("$E$28").Value = finalComission * 0.05
        currentValueAdd = Range("$F$71").Value
      End If
    Next comissionLoop

  Next waiveLoop

  Range("$D$40").Value = Range("$E$27") / 0.05
  Range("$D$41").Value = Range("$E$28") / 0.05
  Range("$F$8").Value = currentValueAdd
End Sub

Ответы [ 2 ]

1 голос
/ 22 сентября 2011

Если я не ошибаюсь, тогда вторая половина вашего условия if никогда не верна, верно?Под этим я подразумеваю, что «Диапазон (« $ F $ 71 »). Значение» никогда не меньше, чем «currentValueAdd».

Если это так, то вам нужно пересмотреть свою логику

    currentValueAdd = Range("$F$71").Value

, поскольку это всегда будет отправлять значение Range ("$ F $ 71") в currentValueAdd, а при проверке условия

    Range("$F$71").Value < currentValueAdd

значение в ячейке F71 не изменилось с момента передачиэто переменная, и поэтому ваше значение в переменной совпадает со значением в F71, поэтому ваше второе условие никогда не будет истинным.

Надеюсь, оно вам помогло.

1 голос
/ 22 сентября 2011

Мой первый вопрос: распознает ли Excel VBA оператор if с двумя ограничениями

Из. Конечно.

Кстати, нет "Excel VBA", есть только VBA. И это практически эквивалентно VB.

Возможно, это проблема моей логики.

Очень вероятно. Тем не менее, в вашем коде нет непосредственной проблемы.

...