未触发Worksheet_Calculate的VBA子。触发此事件的原因是什么?

时间:2016-04-21 12:33:59

标签: excel vba excel-vba

我有一个工作簿,并且在一张工作表上它有子工作表_Calculate,它在数字的单元格上进行一些格式化,只需根据该单元格和另一个单元格的值设置要显示的小数位数格式。

我试图调试问题并打开EnableEvents,打开我的工作簿,它到目前为止做了它的事情。我输入数据,我希望子触发并达到我的断点,但我没有。我甚至没有点击“立即计算”和“计算工作表”按钮。那么什么应该触发Worksheet_Calculate子?我需要工作簿来完成在这个子程序中完成的格式化,我并不关心它在哪里做它只要它做到了。我甚至在sub的开头尝试了Application.EnableEvents = False,在sub的末尾尝试了Application.EnableEvents = True,但没有用。

我对VBA或这个工作簿了解不多,因为它不是我创建的,我会创建一个C#Web应用程序而不是Excel电子表格,但我离题了。

修改1:

以下是有问题的细胞的公式/值,以澄清一些事情。范围Q11:Q35都被格式化为数字类型。他们的公式如下。

=IF(OR(O11="",P11=""),"",(O11/P11)*100)

上面提到的细胞分别具有以下O和P的公式。

=IF(OR(H11=""),"",INDEX(H11:L11,MATCH(9.99999999999999E+307,H11:L11))-M11)

=IF(AND(M11="",N11=""),"",N11-M11)

1 个答案:

答案 0 :(得分:0)

我尝试使用此处的MSDN示例:https://msdn.microsoft.com/en-us/library/office/ff838823.aspx

这个例子不过是:

Private Sub Worksheet_Calculate()
    Columns("A:F").AutoFit
End Sub

当我只是在工作表上输入文字时没有触发,但是当我输入公式时它确实触发了:=1+1

确保您实际上正在输入Excel需要计算的内容。

编辑:正如评论中提到的@gizlmeier,如果要在更改某些内容后执行代码,请使用Worksheet_Change。

编辑2:详细说明何时触发计算:

  • 当输入需要直接计算的公式时
  • 当修改由公式引用的单元格时。

因此,在G列中输入此公式:G不会触发计算:=LEFT(Ax, 3)。如果我们现在将文本或其他静态值输入到范围A:A中,则触发计算,因为需要重新进行col G:G。