2011-09-22 199 views
0

我的第一个问题是因为我有收到,如果封闭在一个代码问题的Excel VBA是否会承认if语句有两个限制,即有麻烦if语句在VBA工作

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

语句触发,当我知道两个约束都满足我正在运行的脚本。也许这是我的逻辑问题。

我已经包含代码,请看看您是否可以指出我的逻辑或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

一方面的评论是,我已经设置了代码设置,以便将最佳值保存在另一个单元格中,然后在脚本完成循环后将它们传回D40和D41。 – Andy

+0

为什么使用单元格来存储临时值(而不是变量)?另外,如果它“不起作用”会发生什么?您是否尝试过使用调试器执行代码? – Tomalak

+0

Tomalak通过“不起作用”,我的意思是它提出了一个没有意义的答案,并满足if语句。所以代码不会中断。当脚本完成循环后,当前结构最适合在箱子中显示最佳解决方案,并在这些最佳杠杆中设置杠杆。 – Andy

回答

1

我的第一个问题是Excel的VBA是否会承认if语句有两个约束

中。课程。

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

也许这是我的逻辑问题。

很可能。尽管如此,在代码中看不到任何直接的问题。

+0

嗨Tomalak,是的,我觉得VBA不可能在if语句中处理多个约束的可能性不大。我会继续关注代码,但还没有找出任何答案。感谢您的帮助 – Andy

1

如果我没有弄错,那么你的条件的下半部分从来不是真的吗?通过这个我的意思是“Range(”$ F $ 71“)。”Value“永远不会小于”currentValueAdd“。

如果是这样的话,我需要重新审视进入你的

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

因为这个逻辑将始终发送范围(“$ F $ 71”,)的值currentValueAdd,当你正在检查的情况条件

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

在小区F71的值,因为你传递给它的变量,所以你在变量值是相同F71的值。因此你的第二个条件永远不会为真并没有改变。

希望它有一些帮助。

+0

嗨android,感谢您查看它,没有办法知道这个没有看电子表格,但单元$ F $ 71改变每次你改变$ D $ 40或$ D $ 41,以便你循环和改变那些单元格F71也会改变。 – Andy