我的第一个问题是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
答案 0 :(得分:1)
我的第一个问题是excel VBA是否会识别带有两个约束的if语句
中。场。
BTW,没有“Excel VBA”,只有VBA。它几乎等同于VB。也许这是我的逻辑问题。
很可能。但是,在您的代码中没有直接的问题。
答案 1 :(得分:1)
如果我没有弄错,那么你的if条件的后半部分永远不对吗?我的意思是“范围(”$ F $ 71“)。”值“永远不会小于”currentValueAdd“。
如果是这种情况,那么我需要重新审视你的逻辑
currentValueAdd = Range("$F$71").Value
因为这将始终将Range(“$ F $ 71”)的值发送到currentValueAdd并且当您检查条件时
Range("$F$71").Value < currentValueAdd
单元格F71中的值由于您将其传输到变量后未发生变化,因此变量中的值与F71中的值相同,因此您的第二个条件永远不会为真。
希望它有所帮助。