2016-11-18 29 views
0

vbaでExcelソルバーを制御しようとしています。私は入力値(i、8)を調整することによって、ターゲットセル(i、10)の値を最小にするためにそれを使用します。私はまた、入力としてセル(i、8)を使用して、いくつかの計算のために外部アプリケーションを呼び出すユーザ定義関数を持っています。ターゲットセルは、UDF出力と別の固定値との差です。vbaソルバー - 反復に遅延を追加する

私はソルバーが定期的に問題を設定してからスキップすることを発見しました。私は手動で値を調整してより良い解を得ることができるので、ソルバはUDFが値を返すよりも速く新しい反復にスキップすると思います。

ソルバー反復を遅くする方法はありますか?それが助け場合は、以下のコード...

Sub Main() 

Dim Msg As String, MyString As String 
Dim Style As Variant, Response As Variant 

Application.ScreenUpdating = False 
Application.EnableEvents = False 

'Define a confirmation message due to long duration of calculations 
Msg = "This calculation takes long. Do you want to proceed?" 

'Define message box style 
Style = vbOKCancel + vbCritical + vbDefaultButton2 

'Record the user response 
Response = MsgBox(Msg, Style) 

If Response = vbOK Then 
     Call RateTool.RateSolver 
    End If 

Application.ScreenUpdating = True 
Application.EnableEvents = True 

End Sub 

ソルバースクリプト

Sub RateSolver() 

Dim First As Integer, Last As Integer 
Dim i As Integer 

First = Cells(2, 4).Value 
Last = Cells(3, 4).Value 

For i = First To Last 

    SolverReset 

    'Define parameters for the solver: Minimise target cell (i,8) by changing input cell (i,6) 
    SolverOk SetCell:=Cells(i, 10), MaxMinVal:=2, ByChange:=Cells(i, 8), Engine:=1 

    SolverSolve UserFinish:=True 

Next i 

End Sub 
+0

申し訳ありませんが、私は、いくつかの長い退屈なコードを取り出しましたMain()は、RateToolを開始するためのボタンを設定します。したがって、if response = vbOK文です。 – bwindi

答えて

2
Application.Wait Now + TimeValue("00:00:02") 

上記2秒間一時停止します

+0

ありがとうございます。それは遅れを導入するのを助けた。残念ながらそれでも問題は解決しなかったので、私のUDFでは時間の遅れが問題ではないようです。これは簡単な方程式で動作しますが、外部アプリケーションを制御するUDFを導入すると、スムーズに動作しません。私は最初に戻ってくると思います。 – bwindi

関連する問題