Worksheet_Calculate()
とWorksheet_Change(ByVal Target As Range)
を含むVBAコードがあります。再計算が行われるときにいくつかのセルを更新する必要があります。 。これらのサブルーチンは、まったく同じサブルーチンを呼び出します。ただし、両方がまったく同じ関数を呼び出すにもかかわらず、それらのうちの1つは正しく(Worksheet_Change)動作し、もう1つ(Worksheet_Calculate)は動作しません。Excel/VBAコードをステップ実行して正常に実行すると動作が異なる
私が取った次のステップは、再計算が行われたときに問題が発生したと思われる場所にブレークポイントを設定することでした。そして、驚いたことに、Worksheet_Calculate()
によって実行されたコードが正しく動作しましたブレークポイントなど)。さらに、通常のモード(デバッグではない)でも正常に動作することがありますが、これは非常にランダムです。私は何が起こっているのか分かりません。
Private Sub Worksheet_Calculate()
MakeVisible
UpdateBaseline
If ([F4] > 0) Then
UpdateDerivative1
End If
If ([F4] > 1) Then
UpdateDerivative2
End If
If ([F4] > 2) Then
UpdateDerivative3
End If
If ([F4] > 3) Then
UpdateDerivative4
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Sheets("Main").Range("C7:C61"), Range(Target.Address)) Is Nothing Then
MakeVisible
UpdateBaseline
If ([F4] > 0) Then
UpdateDerivative1
End If
If ([F4] > 1) Then
UpdateDerivative2
End If
If ([F4] > 2) Then
UpdateDerivative3
End If
If ([F4] > 3) Then
UpdateDerivative4
End If
End If
End Sub
いくつかのより多くの時間のデバッグを過ごした後、私は以来、いくつかの競合状態があることを信じている:以下は私の潜水艦の短縮版(MakeVisible
、UpdateBaseline
、UpdateDerivative1
は私が後で定義されたすべてのサブルーチンがある...)ですUpdateBaseline
、UpdateDerivative1
などのコードは、実際には星やストレートコネクタなどの形状オブジェクトをサイズ変更したり動かしたりしていますが、それらの位置を指定する変数には、正しい値。私の直感は、形の移動やプロパティの変更は、ある種の競合状態を引き起こす可能性のある計算を必要としますが、これは単なる推測であり、完全に無関係である可能性があります。
ありがとうございました!
私の他の推測は、あなたのコードのいくつかは現在の選択に依存するかもしれないということです。たとえば、 '[F4]'はどのシートがアクティブ/選択されているかによって異なる値を返すことができますが、 '[Main!F4]'は少し具体的です。 – Slai