使 if 语句在 VBA 中运行时遇到问题

发布于 2024-12-05 17:48:04 字数 1590 浏览 4 评论 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

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

墨洒年华 2024-12-12 17:48:04

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

。课程。

顺便说一句,没有“Excel VBA”,只有 VBA。它实际上相当于VB。

也许是我的逻辑有问题。

很有可能。不过,您的代码中没有立即出现问题。

My first question is whether excel VBA will recognize an if statement with two constraints

Of. Course.

BTW, there is no "Excel VBA", there is just VBA. And it is virtually equivalent to VB.

Maybe its a problem with my logic.

Very probably. There is no immediate problem to see in your code, though.

ゞ花落谁相伴 2024-12-12 17:48:04

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

如果是这种情况,那么您需要重新检查您的逻辑,

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

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

    Range("$F$71").Value < 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

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

as this will always send the value of Range("$F$71") to currentValueAdd and when you are checking the condition

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

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文