ExcelにVBA内からシートのデータを更新させる
質問
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