Поймать максимальное время / итерация диалоговое окно при использовании Excel Solver в VBA - PullRequest
2 голосов
/ 21 октября 2010

Я использую встроенный решатель в Excel 2003 в цикле VBA, чтобы решить ряд различных проблем. Время от времени решатель достигает максимального времени или предела итераций, в результате чего появляется всплывающее диалоговое окно с вопросом, хочет ли пользователь продолжить, остановить или завершить. Во всех случаях я хочу, чтобы это закончилось, и перейти к следующей строке цикла. Это избавит пользователя от необходимости сидеть и отвечать каждый раз.

Кажется, здесь кто-то нанес удар, но не смог: http://www.excelforum.com/excel-programming/483175-catching-max-iterations-stop-of-solver-in-vba.html

1 Ответ

2 голосов
/ 29 октября 2010

вот пример решения:

он использует метод SolverSolve PassThru для вызова функции для обработки результата решателя на каждой итерации

Option Explicit

Sub SolverExample()
    Dim results

    ' Set up your solver here...


    ' Execute solve
    SolverOptions StepThru:=True

    results = SolverSolve(True, "SolverIteration")

    Select Case results
    Case 0, 1, 2
        ' solution found, keep final values
        SolverFinish KeepFinal:=1
    Case 4
        'Target does not converge
        'Your code here
    Case 5
        'Solver could not find a feasible solution
        'Your code here
    Case Else
        'Your code
    End Select
End Sub

Function SolverIteration(Reason As Integer)
    ' Called on each solver iteration

    Const SolverContinue As Boolean = False
    Const SolverStop As Boolean = True
    '
    Select Case Reason
    Case 1
        SolverIteration = False ' Continue

    Case 2
        ' Max Time reached
        SolverIteration = True ' Stop

    Case 3
        ' Max Iterations reached
        SolverIteration = True ' Stop

    End Select
End Function
...