SolverSolve Function

Начинает запуск решения "Решатель". Эквивалентно выбору решения в диалоговом окне Параметры решателя .

Примечание Надстройка "Решатель" не включена по умолчанию. Прежде чем использовать эту функцию, необходимо включить и установить надстройку Решателя. Сведения о том, как это сделать, см. в разделе Использование функций Решателя VBA. После установки надстройки "Поиск решения" необходимо установить ссылку на надстройку "Поиск решения". В редакторе Visual Basic с активным модулем щелкните Ссылки в меню Сервис, а затем выберите пункт Поиск решения в разделе Доступные ссылки. Если пункт поиск решения не отображается в разделе Доступные ссылки, нажмите кнопку Обзор и откройте элемент Solver.xlam во вложенной папке \Program Files\Microsoft Office\Office14\Library\SOLVER.

SolverSolve( UserFinish, ShowRef)

UserFinish Необязательный вариант Variant. Значение true , чтобы вернуть результаты без отображения диалогового окна Результаты решателя . Значение false или опущено для возврата результатов и отображения диалогового окна Результаты решателя . ShowRef Необязательный вариант Variant. Имя макроса (в виде строки) можно передать в качестве аргумента ShowRef . Затем этот макрос вызывается вместо отображения диалогового окна Показать пробное решение при приостановке решения по любой из перечисленных ниже причин. Макрос ShowRef должен иметь имя функции сигнатуры (Аргумент как целое число). Аргумент Reason — это целочисленное значение от 1 до 5:

  1. Функция вызывается (при каждой итерации), так как установлен флажок Показать результаты итерации в диалоговом окне Параметры решателя , или функция, вызванная из-за нажатия клавиши ESC для прерывания решателя.

  2. Функция вызывается из-за превышения максимального времени в диалоговом окне Параметры решателя .

  3. Функция вызывается потому, что превышен предел итераций в диалоговом окне Параметры решателя .

  4. Функция вызывается из-за превышения предельного числа подпрограмм в диалоговом окне Параметры решателя .

  5. Функция вызывается из-за превышения предельного числа возможных решений в диалоговом окне Параметры решателя .

Функция макросов должна возвращать значение 1, если средство поиска должно остановиться (аналогично кнопке Остановить в диалоговом окне Показать пробное решение ), или 0, если средство поиска должно продолжать работу (аналогично кнопке Продолжить ). Макрос ShowRef может проверять текущие значения решения на листе или выполнять другие действия, такие как сохранение промежуточных значений или создание диаграмм. Однако он не должен изменять значения в ячейках переменных или изменять формулы в целевых и ограничивающих ячейках, так как это может негативно повлиять на процесс решения.

Возвращаемое значение SolverSolve

Если проблема решателя не определена полностью, Функция SolverSolve возвращает значение ошибки #N/A. В противном случае выполняется средство поиска, и SolverSolve возвращает целочисленное значение, соответствующее сообщению, которое отображается в диалоговом окне Результаты решения :

Возвращаемое значение Сообщение
0 Решатель нашел решение. Выполняются все ограничения и условия оптимальности.
1 Решатель сошелся с текущим решением. Все ограничения удовлетворены.
2 Решатель не может улучшить текущее решение. Все ограничения удовлетворены.
3 Остановка, выбранная при достижении максимального предела итерации.
4 Значения целевой ячейки не сходятся.
5 Решателям не удалось найти подходящее решение.
6 Решатель остановился по запросу пользователя.
7 Условия линейности, необходимые для этого решателя LP, не удовлетворяются.
8 Проблема слишком велика для Решения.
9 Решатель обнаружил значение ошибки в целевой ячейке или ячейке ограничения.
10 Остановка, выбранная при достижении максимального срока.
11 Недостаточно памяти для решения проблемы.
13 Ошибка в модели. Убедитесь, что все ячейки и ограничения допустимы.
14 Решатель нашел целочисленное решение в пределах допустимости. Все ограничения удовлетворены.
15 Остановка, выбранная при достижении максимального количества возможных [целочисленных] решений.
16 Остановка, выбранная при достижении максимального числа допустимых подзадач [целочисленного].
17 Решатель сходился с вероятностью к глобальному решению.
18 Все переменные должны иметь верхнюю и нижнюю границы.
19 Конфликт между границами переменных в двоичном или любом другом ограничении.
20 Нижние и верхние границы переменных не позволяют решить проблему.

Пример

В этом примере используются функции Решателя для максимизации валовой прибыли при решении бизнес-задачи. Функция SolverSolve начинает запуск решения Решателя. Решатель вызывает функцию ShowTrial при возникновении любого из пяти описанных выше условий. Функция просто отображает сообщение с целым числом от 1 до 5.

Worksheets("Sheet1").Activate 
SolverReset 
SolverOptions Precision:=0.001 
SolverOK SetCell:=Range("TotalProfit"), _ 
    MaxMinVal:=1, _ 
    ByChange:=Range("C4:E6") 
SolverAdd CellRef:=Range("F4:F6"), _ 
    Relation:=1, _ 
    FormulaText:=100 
SolverAdd CellRef:=Range("C4:E6"), _ 
    Relation:=3, _ 
    FormulaText:=0 
SolverAdd CellRef:=Range("C4:E6"), _ 
    Relation:=4 
SolverSolve UserFinish:=False, ShowRef:= "ShowTrial" 
SolverSave SaveArea:=Range("A33") 
 
Function ShowTrial(Reason As Integer) 
  Msgbox Reason 
  ShowTrial = 0 
End Function

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.