在宏和宏刷新速度下SHIFT + F9

时间:2013-02-26 07:12:27

标签: vba excel-vba excel

我制作了两个链接的宏。

其中一个会在工作簿中生成某个工作表的副本。这里的问题是我需要在所有复制的工作表中按shift + f9来更新我的值。我已经使用了calculate和application.calculate = xl ......

第二个宏调用第一个宏的值并对其执行操作。这里的问题是在运行第一个宏并使用shift + f9后,更新所有工作表..如果我使用指定的按钮运行第二个宏它不会运行但是如果我进入宏并逐步运行它运行正常。

我认为这是因为第一个宏的值需要时间来刷新,因此会出现这个问题。

Macro1:

Sub macro1()
Worksheets("Excel Inputs").Activate
If Sheets("Excel Inputs").Cells(11, "P") = 3 Then
    Sheets("Valuation 02").Delete
    Sheets("Valuation 03").Delete
ElseIf Sheets("Excel Inputs").Cells(11, "P") = 2 Then
    Sheets("Valuation 02").Delete
End If
Length = WorksheetFunction.CountA(Range("B13:B15"))
For i = 1 To Length - 1
    Sheets("Valuation 01").Copy After:=Sheets(4 + i)
    Sheets(4 + i + 1).Name = "Valuation 0" & (i + 1)
    Application.Calculation = xlCalculationAutomatic
Next i
    Sheets("Excel Inputs").Cells(11, "P") = Length
End Sub

任何人都可以帮我这个吗?

1 个答案:

答案 0 :(得分:0)

通常我会使用Application.onTime Now + TimeValue("hh:mm:ss"),"macro2"
解决这类问题。您可以将macro2设置为以一定的延迟运行到macro1。

并确保在macro1的末尾,  Application.calculation = xlCalculationAutomaticApplication.CalculateFullRebuild

如果此方法不够好,则必须使用单元格或全局变量作为守望者来确定是否所有计算都已完成。
例如,在marco1的末尾,继续使用Application.onTime事件来检查某些单元格值<> “” 如果还没有完成,递归调用自己。

参考:Application.OnTime Application.CalculateFullRebuild