使 if 语句在 VBA 中运行时遇到问题
我的第一个问题是 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
My first question is whether excel VBA will recognize an if statement with two constraints, i.e.
IF Range(somecell).value > 0 AND Range(anothercell).value < 100 Then:
execute code here
Because I am having a problem with getting the code enclosed in an if statement to trigger when I know that both constraints are satisfied in a script I'm running. Maybe its a problem with my logic.
I've included the code, please see if you can point out any errors in my logic or VBA.
Background Information (I also included some in the code):
There are two levers that change cell F71(D40 and D41). The requirements are that F71 be greater than 0 and it must be less than the current value for F71 (Saved in variable currentValueAdd).
So I loop through both layers iterating through all the possible combinations trying to find the optimal combination that satisfies the above conditions. Sometimes I open excel and it works fine, other times it doesn't work at all. The results are very erratic.
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
。课程。
顺便说一句,没有“Excel VBA”,只有 VBA。它实际上相当于VB。
很有可能。不过,您的代码中没有立即出现问题。
Of. Course.
BTW, there is no "Excel VBA", there is just VBA. And it is virtually equivalent to VB.
Very probably. There is no immediate problem to see in your code, though.
如果我没有弄错的话,那么你的 if 条件的后半部分永远不会成立,对吧?我的意思是“Range("$F$71").Value”永远不会小于“currentValueAdd”。
如果是这种情况,那么您需要重新检查您的逻辑,
因为这将始终将 Range("$F$71") 的值发送到 currentValueAdd,并且当您检查条件时,
单元格 F71 中的值自您以来没有更改将其转移到变量中,因此变量中的值与 F71 中的值相同,因此第二个条件永远不会成立。
希望它有所帮助。
If im not mistaken then the second half of your if condition is never true right? By this i mean that "Range("$F$71").Value" is never less than "currentValueAdd".
If this is the case then i you need to relook into your logic of
as this will always send the value of Range("$F$71") to currentValueAdd and when you are checking the condition
the value in cell F71 has not changed since you transferred it to the variable and so your value in the variable is the same as the value in F71 thus your second condition will never be true.
Hope it has been of some help.