尽管是CalculationManual,Excel仍然会在隐藏行时重新计算

时间:2016-05-05 11:25:16

标签: excel vba excel-vba

对不起,如果重复,但在互联网上找不到任何关于我的问题。

所以我有:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

然后在脚本的某处有

For Each sheet In sheets
    If sheet.Cells(i, ColBrand).Rows.Hidden Then
        sheet.Cells(i, ColBrand).EntireRow.Hidden = False
    End If
Next

,其中ColBrand只是一个在开头定义为常量的列号。

所以它会通过一系列隐藏行的工作表来完成其工作。

问题是,尽管有Calcumanual,但偶尔会在状态栏中弹出“计算:xx%”。除了执行速度之外,这导致我认为Excel在隐藏每一行后重新计算整个工作表(可能是工作簿)。这很难过。

有什么想法吗?

谢谢!

现在我在想,是不是因为我在其中一个工作表上编写了几个VBA编写的Application.Volatile函数?

我确实有这个函数,它在一个条件下调用,触发WorkSheet_change事件。如果这有任何帮助

Function get_rand(floor As Long, ceiling As Long, exceptions() As Long)

Dim rand As Long, _
    position As Variant

If UBound(exceptions) - LBound(exceptions) + 1 >= 999999 Then
    get_rand = "error"
Else
    Do Until IsError(position)
        rand = CLng(((ceiling - floor + 1) * Rnd() + floor))
        position = Application.Match(rand, exceptions, False)
        get_rand = rand
    Loop
End If

End Function

哦,顺便说一句,上面的代码与具有WorkSheet_Change例程的工作表交互。 Target.Adress的这些部分相交,但上面的代码既没有改变也没有更新。这可能是原因吗?

1 个答案:

答案 0 :(得分:0)

MS Document讨论了这个问题。

它声明"用户可以通过多种方式触发Microsoft Excel中的重新计算,例如:" ..."删除或插入行或列。"

我认为你偶然发现了一个记录在案的"功能"。