現在、私はソルバーを実行するExcelでプログラムを作成しています。私はsolverコマンドに最大時間制限を設定しました。プログラムが制限時間を超えると、続行するか停止するかを尋ねるソルバーダイアログボックスが表示されます。ユーザーがオプションをクリックする必要はなく、自動的に停止を選択するようにVBAにコードする方法があるかどうか疑問に思っていました。VBAコマンドを使用してソルバーを操作するダイアログボックス
ありがとうございます!
現在、私はソルバーを実行するExcelでプログラムを作成しています。私はsolverコマンドに最大時間制限を設定しました。プログラムが制限時間を超えると、続行するか停止するかを尋ねるソルバーダイアログボックスが表示されます。ユーザーがオプションをクリックする必要はなく、自動的に停止を選択するようにVBAにコードする方法があるかどうか疑問に思っていました。VBAコマンドを使用してソルバーを操作するダイアログボックス
ありがとうございます!
はい、できます。ソルバーオブジェクトにいくつかのオプションを設定する必要があります。あなたはUserFinishオプションバリアント
In the MSDN documentationそれについての詳細を読むことができます。ソルバー結果ダイアログボックスを表示せずに結果を返す場合はTrueを選択します。結果を返し、ソルバー結果ダイアログボックスを表示するには、Falseまたは省略します。SolverSolve(UserFinish, ShowRef)
ShowRefオプションバリアント。 ShowRef引数として、マクロの名前(文字列として)を渡すことができます。このマクロは、その後、ソルバーあなたが整数の引数を取る必要があり、実行されるマクロを定義する必要が
を記載されているのいずれかの理由で一時停止したときに表示試用ソリューションダイアログボックスを表示する代わりに、と呼ばれています。あなたはその後、定義する必要が
SolverSolve UserFinish:=True, ShowRef:= "ShowTrial"
:ここでのコード例では、ストレート(リンクは将来的に壊れている場合にはここに掲載)リンク先のページ
あなたは上記のそれに引数を渡す、SolverSolveを呼び出してから、あります走るShowTrail
マクロ、およびそれが正しいシグネチャを持つ必要があります。
Function ShowTrial(Reason As Integer)
'Msgbox Reason <= commented out, as you just want it to end, with no user input
ShowTrial = 0 'See comment below on the return value.
End Function
戻り値は重要です。ソルバーが無関係に実行されるようにする場合は0を返し、停止させたい場合は1を返します。
これで、完了したさまざまな理由で異なる動作になる可能性があります。たとえば、最大時間制限(あなたのケース)に達した場合は、停止します。それ以外の場合は、次の手順を実行します。
Function ShowTrial(Reason As Integer)
Select Case Reason
Case 1 '//Show iterations option set
ShowTrial = 0 '//Carry on
Exit Function
Case 2 '//Max time limit reached
ShowTrial = 1 '//Stop
Exit Function
Case 3 '//Max Iterations limit reached
ShowTrial = 0 '//Keep going
Exit Function
Case 4 '//Max subproblems limit reached
ShowTrial = 0 '//Keep Going
Exit Function
Case 5 '//Max feasible solutions limit reached
ShowTrial = 0 '//Keep going
Exit Function
End Select
End Function