0

我的第一个问题是 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
4

2 回答 2

1

我的第一个问题是 excel VBA 是否会识别带有两个约束的 if 语句

的。课程。

顺便说一句,没有“Excel VBA”,只有 VBA。它几乎等同于VB。

可能是我的逻辑有问题。

很可能。不过,在您的代码中没有直接的问题。

于 2011-09-22T16:14:27.917 回答
1

如果我没记错的话,那么你的 if 条件的后半部分永远不会是真的,对吧?我的意思是“Range("$F$71").Value”永远不会小于“currentValueAdd”。

如果是这种情况,那么我需要重新审视你的逻辑

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

因为这将始终将 Range("$F$71") 的值发送到 currentValueAdd 并且当您检查条件时

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

单元格 F71 中的值自从您将其转移到变量后没有改变,因此您在变量中的值与 F71 中的值相同,因此您的第二个条件永远不会成立。

希望它有所帮助。

于 2011-09-22T17:58:13.213 回答