1

我做了两个链接的宏。

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

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

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

宏1:

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

谁可以帮我这个事 ?

4

1 回答 1

0

通常我会用它Application.onTime Now + TimeValue("hh:mm:ss"),"macro2"
来解决这类问题。您可以将宏 2 设置为对宏 1 有一些延迟运行。

并确保在您的宏1结束时, Application.calculation = xlCalculationAutomaticApplication.CalculateFullRebuild

如果这个方法不够好,就得用一个单元格或者一个全局变量作为守望者来判断是否所有的计算都完成了。
例如,在 marco1 结束时,继续使用Application.onTimeevent 来检查某些单元格值 <> "",如果尚未完成,则递归调用自身。

参考:Application.OnTime Application.CalculateFullRebuild

于 2013-02-26T07:39:32.177 回答