2016-09-28 7 views
0

ワークシートに変更があったときに自動的に実行されるマクロを使用してGoalSeekメソッドを実装しようとしています。コードはシンプルですが、このエラーメッセージが表示されていますが、解決方法がわかりません。コードは、RangeクラスのGoalSeekメソッドが失敗しました

Private Sub Worksheet_Calculate() 
    CheckGoalSeek 
End Sub 

Private Sub CheckGoalSeek() 
Dim wb As Workbook 
Dim ws As Worksheet 

Set wb = ActiveWorkbook 
Set ws = wb.Sheets("MAIN") 

    ws.Range("N45").GoalSeek Goal:=0, ChangingCell:=ws.Range("D49") 

End Sub 

ここで、「N45」は式ベースのセルであり、「D49」は値です。ランタイムエラーメッセージ "RangeクラスのGoalSeekメソッドが失敗しました"が表示されます。

何か助けていただければ幸いです。

答えて

2

GoalSeekがワークシートの計算を強制するので、それは、CheckGoalSeekを呼び出すWorksheet_Calculateイベントを発火するワークシートの計算を強制するGoalSeekを行うであろう、CheckGoalSeekを呼び出すWorksheet_Calculateイベントを起動しますこれはGoalSeekを実行し、ワークシートの計算を強制します。

この循環フローを回避するには、イベント処理を無効にする必要があります。

にご Worksheet_Calculate機能を変更

Private Sub Worksheet_Calculate() 
    Application.EnableEvents = False 
    CheckGoalSeek 
    Application.EnableEvents = True 
End Sub 

免責事項:私はそれはエクセルの私のコピーをロックアップし、これを試してみました初めて。私はそれを試してみました2回目は働いた。

+0

これは機能しました!しかし今、新しい問題が始まりました。 Excel CalculationオプションがAutomaticに設定されているにもかかわらず、「Calculate Now」ボタンをクリックして作業を進める必要があります。これを避けるために私が含めることができるコマンドはありますか? – Amitava

+0

@Amitava - そのコードは自動計算を妨害すべきではありません。それは私のテストワークブックで喜んで自動的に計算していました。 (私はちょうど '= D49-1'を言っているN45の簡単な公式を持っていて、D49に新しい値を入力して遊んだのですが、マクロはD49を常に1に戻しました) – YowE3K

関連する問題