2017-09-01 8 views
0

現在、私はソルバーを実行するExcelでプログラムを作成しています。私はsolverコマンドに最大時間制限を設定しました。プログラムが制限時間を超えると、続行するか停止するかを尋ねるソルバーダイアログボックスが表示されます。ユーザーがオプションをクリックする必要はなく、自動的に停止を選択するようにVBAにコードする方法があるかどうか疑問に思っていました。VBAコマンドを使用してソルバーを操作するダイアログボックス

ありがとうございます!

答えて

1

はい、できます。ソルバーオブジェクトにいくつかのオプションを設定する必要があります。あなたはUserFinishオプションバリアント

SolverSolve(UserFinish, ShowRef) 

In the MSDN documentationそれについての詳細を読むことができます。ソルバー結果ダイアログボックスを表示せずに結果を返す場合はTrueを選択します。結果を返し、ソルバー結果ダイアログボックスを表示するには、Falseまたは省略します。

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 
関連する問題