1

2 つのリンクされたマクロを作成しました。

それらの 1 つは、ブック内の特定のシートのコピーを生成します。ここでの問題は、コピーしたすべてのシートで Shift+F9 を押して値を更新する必要があることです。私はすでにcalculateとapplication.calculate = xlを使用しています......

2 番目のマクロは、最初のマクロの値を呼び出し、それに対して操作を実行します。ここでの問題は、最初のマクロを実行し、shift+f9 を使用してすべてのシートを更新した後、割り当てられたボタンを使用してこの 2 番目のマクロを実行すると実行されませんが、マクロにステップインしてステップバイステップで実行すると、正常に動作します。

最初のマクロの値が更新されるのに時間がかかるため、この問題が発生すると思います..

マクロ 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 = xlCalculationAutomatic または Application.CalculateFullRebuild

この方法では不十分な場合は、セルまたはグローバル変数をウォッチマンとして使用して、すべての計算が完了したかどうかを判断する必要があります。
たとえば、marco1 の最後で、Application.onTimeイベントを使用していくつかのセル値 <> "" をチェックし続け、まだ完了していない場合は再帰呼び出し自体を行います。

参考:Application.OnTime Application.CalculateFullRebuild

于 2013-02-26T07:39:32.177 に答える