如何仅重新计算活动工作簿?

时间:2019-07-12 08:17:25

标签: excel vba excel-formula

我正在尝试创建一个vba宏来重新计算活动工作簿。

我尝试使用那些功能,但没有结果:

  • Application.CalculateFull(它重新计算所有打开的工作簿,因此 这需要很多时间)

  • 类似的东西:

    Application.Calculation = xlCalculationManual
    ActiveSheet.Calculate
    Application.Calculation = xlCalculationAutomatic
    
  • 这也是:

    Dim sh As Worksheet
    Application.Calculation = xlCalculationManual
    For Each sh In ActiveWorkbook.Sheets
        sh.Calculate
    Next sh
    Application.Calculation = xlCalculationAutomatic
    

2 个答案:

答案 0 :(得分:1)

如果第一个不适用于您,则可以尝试以下其他方法。

对于有效的工作表

ActiveSheet.Calculate

vbasheetname.Calculate

Worksheets("Sheet1").Calculate

对于有效的工作簿

Sub CalcBook()
    Dim wks As Worksheet
    Application.Calculation = xlManual
    For Each wks In ActiveWorkbook.Worksheets
        wks.Calculate
    Next
    Set wks = Nothing
End Sub

或:

Application.Calculation = xlManual
ThisWorkbook.Sheets.Select
ActiveSheet.Calculate 

或:     Application.CalculateBeforeSave = True

或:Application.Calculate

或:

For Each wks In ThisWorkbook.Worksheets
    wks.Calculate
Next wks

注意:最好的做法是,如果可能的话,避免在代码中使用Activesheet(很少需要使用Activesheet),因此请坚持使用后两个。

如果您要按特定顺序计算工作簿,那么据我所知,没有解决方案,唯一的答案就是知道工作簿的计算顺序并手动计算工作表订购,或使用Calculate接受,它将计算所有打开的工作簿。

答案 1 :(得分:0)

您可以在ActiveWorkbook中循环浏览工作表,并根据工作表索引计算每个工作表:

Sub CalculateWorkbook()

Dim wb as Workbook
Dim i as Integer
Dim sheetCount as Integer

set wb = ActiveWorkbook
sheetCount = wb.Worksheets.Count

For i = 1 to sheetCount
    wb.Sheets(i).Calculate
Next i

End Sub