Excelでスプレッドシートデータを取得して、セル値を変更するだけでなく、VBA内から自分自身を再計算する方法を教えてください。
次の行でトリックを行います:
ActiveSheet.EnableCalculation = False
ActiveSheet.EnableCalculation = True
編集:.Calculate()
メソッドは、すべての関数で機能するわけではありません。アドイン配列関数を使用してシートでテストしました。私が使用しているプロダクションシートは非常に複雑なので、.CalculateFull()
メソッドをテストしたくありませんが、うまくいくかもしれません。
これでうまくいくはずです...
'recalculate all open workbooks
Application.Calculate
'recalculate a specific worksheet
Worksheets(1).Calculate
' recalculate a specific range
Worksheets(1).Columns(1).Calculate
Excelが一時中断し、方程式を再適用するためにキックスタートが必要になる場合があります。これは、カスタム式を使用している場合に発生します。
次のスクリプトがあることを確認してください
ActiveSheet.EnableCalculation = True
選択式を再適用します。
Cells(RowA,ColB).Formula = Cells(RowA,ColB).Formula
これは必要に応じてループできます。
あなたも試してみてください
Application.CalculateFull
または
Application.CalculateFullRebuild
アクティブなワークシートだけでなく、開いているすべてのワークブックを再構築してもかまいません。 (CalculateFullRebuild
は依存関係も再構築します。)
背景画像をオフにする際に問題が発生しました(ドラフト透かし) VBAで。私の変更は表示されませんでした(Sheets(1).PageSetup.CenterHeader = ""
メソッドで実行されました)-更新する方法が必要でした。 ActiveSheet.EnableCalculation
アプローチは部分的にトリックを行いましたが、未使用のセルをカバーしませんでした。
最終的に、画像が設定されなくなったときに画像が消えるライナーが1つあれば、必要なものが見つかりました:-
Application.ScreenUpdating = True
データ接続の更新後、一部のUDFが実行されていませんでした。サブルーチンを使用して、単一の列を次のように再計算しようとしました:
Sheets("mysheet").Columns("D").Calculate
しかし、上記のステートメントは効果がありませんでした。上記の解決策はどれも役に立たなかったが、式を置き換えるkambeeksの提案は機能し、更新中に手動の再計算をオンにした場合は高速でした。以下のコードは私の問題を解決しました。OP "kluge"コメントに正確に責任を負わなくても、ユーザー指定のセルの再計算を強制する高速/信頼できるソリューションを提供しました。
Application.Calculation = xlManual
DoEvents
For Each mycell In Sheets("mysheet").Range("D9:D750").Cells
mycell.Formula = mycell.Formula
Next
DoEvents
Application.Calculation = xlAutomatic