Страницы: 1
RSS
Запуск "Поиск решения" в ходе макроса
 
Коллеги, добрый день  
 
Хочу как часть макроса сделать запуск "Поиск решения" (обычная надстройка Excel). Записал через рекодер, но воспроизводиться макрос почему-то не хочет. Пишет "Sub or Function not defined".  
Может надо References какие-нибудь поставить?
 
Странно что макрорекодер вообще что-то пишет. Я полагаю, что все функции прописаны для обработки данных из формы, которая предлагается при активации надстройки пользователем и внешнего интерфейса вряд-ли имеет.    
А не проще написать собственную процедуру поиска решения?
 
Для меня не проще :))  
Даже если условия поставить заранее, а записать только запуск формы и ОК (там же условия все сохраняются), то всё равно не работает - спотыкается на первой строчке.
 
Нашел тему http://www.planetaexcel.ru/forum.php?thread_id=7527  
Всё-таки у кого-то работает поиск как часть макроса...
 
Сам спросил, сам ответил... Действительно, поставил галку в Tools-References напротив SOLVER и всё заработало.
 
А зачем мне Пакета анализа VBA?  
 
и другой вопрос возник: оставляю в коде только строчку    
SolverSolve (поиск решения по ранее заданным параметрам)  
по результатам он выдает окошко "Найдено решение" ну или "не найдено"...    
как это окошко автоматически убрать?  
вариант 1: отключить, чтобы не появлялось (хотя это не стандартное Excel Alert, так что не знаю, можно ли)  
вариант 2: сгенерировать нажатие кнопки Enter (подскажите, какую команду написать)
 
{quote}{login=Haken}{date=16.03.2010 01:15}{thema=}{post}Сам спросил, сам ответил... Действительно, поставил галку в Tools-References напротив SOLVER и всё заработало.{/post}{/quote}  
Уважаемый Haken, как вы справились с проблемой дублирования строк ограничений при многократном запуске макроса?
 
Что Вы имеете ввиду? Если у Вас при каждом запуске макроса формируются ограничения (макросом) (и дублируются, соответственно), то там же можно прописать, чтобы предыдущие ограничения удалялись  
команда - SolverDelete CellRef:="...", Relation:=..., FormulaText:="..."  
 
А лучше наверно написать так, чтобы не надо было ограничения переписывать.
 
Спасибо за совет. Теперь все работает.
 
макрорекодером записан поиск решения. получилось вот так:  
Range("BR10").Select  
   SolverOk SetCell:="$BR$10", MaxMinVal:=3, ValueOf:="0", ByChange:="$AF$10:$AS$10"  
   SolverAdd CellRef:="$AF$10:$AS$10", Relation:=3, FormulaText:="0"  
   SolverOk SetCell:="$BR$10", MaxMinVal:=3, ValueOf:="0", ByChange:="$AF$10:$AS$10"  
   SolverAdd CellRef:="$BI$10:$BT$10", Relation:=2, FormulaText:="0"  
   SolverOk SetCell:="$BR$10", MaxMinVal:=3, ValueOf:="0", ByChange:="$AF$10:$AS$10"  
   SolverSolve True  
 
Range("BR10").Select  
     
   SolverOk SetCell:="$BR$10", MaxMinVal:=3, ValueOf:="0", ByChange:="$AF$10:$AS$10"  
   SolverAdd CellRef:="$AF$10:$AS$10", Relation:=3, FormulaText:="0"  
   SolverOk SetCell:="$BR$10", MaxMinVal:=3, ValueOf:="0", ByChange:="$AF$10:$AS$10"  
   SolverAdd CellRef:="$BI$10:$BT$10", Relation:=2, FormulaText:="0"  
   SolverOk SetCell:="$BR$10", MaxMinVal:=3, ValueOf:="0", ByChange:="$AF$10:$AS$10"  
   SolverSolve    
проблема в том, что после SolverSolve True выдается окошко (см. принскрин)  
Если нажать Продолжить, то всё посчитается, но аналогичных сценариев ещё штук 50 будет, согласиетсь, как-то неинтересно 50 раз кнопку нажимать.  
По вышеприведенным советам написала SolverSolve True в конце, но результат тот же.
 
сорри, лог два раза вставился. таки окончательно он выглядит вот так:  
 
Range("BR10").Select  
SolverOk SetCell:="$BR$10", MaxMinVal:=3, ValueOf:="0", ByChange:="$AF$10:$AS$10"  
SolverAdd CellRef:="$AF$10:$AS$10", Relation:=3, FormulaText:="0"  
SolverOk SetCell:="$BR$10", MaxMinVal:=3, ValueOf:="0", ByChange:="$AF$10:$AS$10"  
SolverAdd CellRef:="$BI$10:$BT$10", Relation:=2, FormulaText:="0"  
SolverOk SetCell:="$BR$10", MaxMinVal:=3, ValueOf:="0", ByChange:="$AF$10:$AS$10"  
SolverSolve
 
сам шучу, сам смеюсь)))  
надо ставить     SolverSolve UserFinish:=True
Страницы: 1
Читают тему
Наверх