2016-04-21 110 views
1

我有一个工作簿,并且在一张工作表上有一个Worksheet_Calculate子单元,它在单元格中对数字进行一些格式化,只是根据该单元格和另一个单元格的值设置小数位数的格式。Worksheet_Calculate的VBA子未被触发。什么触发了这个事件?

我试图调试该问题并打开EnableEvents,打开了我的工作簿,它到目前为止做了它的事情。我输入数据,我期望sub被触发并打破我的突破点,但我没有。我什至没有点击“立即计算”和“计算表”按钮。那么应该怎样激发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) 
+0

如果要在更改某些内容后执行代码,请使用Worksheet_Change。 Worksheet_Calculate仅在工作表计算时执行 – gizlmo

+0

Worksheet_Calculate将在其单元格中更改数字格式。 – DrPepperholik

+0

如果更改公式所依赖的单元格不会触发'Calculate'事件,则可以手动设置计算集或禁用事件。 – Rory

回答

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如果你想执行后的东西已被更改的代码。

EDIT 2:向计算被触发时阐述:

  • 当式是输入,需要直接计算
  • 当细胞被修饰,其由公式引用。

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

+0

Worksheet_Calculate子将改变格式的单元格的公式。 这是“Q”列中的公式。范围是Q11:Q35并且每个人都有相同的公式:= IF(OR(O12 =“”,P12 =“”),“”,(O12/P12)* 100) – DrPepperholik

+0

@DrPepperholik编辑答案以澄清何时计算触发。请注意,trogger - handler中的函数不知道它要做什么;您所描述的格式是为了响应计算而完成的,但仅输入文本(并且要求对所述文本进行新格式化)并不被视为需要重新计算。如果这是您的用例,请使用'Worksheet_Change'。 – steenbergh

+0

我编辑了我最初的问题来澄清一些事情,但由Worksheet_Calculate格式化的单元格包含公式。它们也在Excel中格式化为数字型单元格。 – DrPepperholik