I’m trying to use the solver from Excel in VBA but I’m having trouble. I keep getting the following error: «Solver: An unexpected internal error occurred, or available memory was exhausted.»
Now, I guess solver isn’t out of memory as I can solve the same problem when using the solver dialog.
Here’s my code:
Sub CoolSolverButton()
SolverReset
SolverOK setCell:=Range("$CK$203"), MaxMinVal:=1, ByChange:=Range("$BH$203:$BQ$222"), Engine:=2, EngineDesc:="Simplex LP"
SolverAdd CellRef:=Range("$BH$203:$BQ$222"), relation:=5, FormulaText:="binary"
SolverAdd CellRef:=Range("$BH$223:$BQ$223"), relation:=1, FormulaText:=Range("$BH$225:$BQ$225")
SolverAdd CellRef:=Range("$BH$227:$BH$245"), relation:=1, FormulaText:=Range("$BI$227:$BI$245")
SolverAdd CellRef:=Range("$BJ$227:$BJ$245"), relation:=1, FormulaText:=Range("$BK$227:$BK$245")
SolverAdd CellRef:=Range("$BL$227:$BL$245"), relation:=1, FormulaText:=Range("$BM$227:$BM$245")
SolverAdd CellRef:=Range("$BN$227:$BN$245"), relation:=1, FormulaText:=Range("$BO$227:$BO$245")
SolverAdd CellRef:=Range("$BP$227:$BP$245"), relation:=1, FormulaText:=Range("$BQ$227:$BQ$245")
SolverAdd CellRef:=Range("$BR$203:$BR$222"), relation:=2, FormulaText:=Range("$BT$203:$BT$222")
SolverAdd CellRef:=Range("$BU$203:$BU$222"), relation:=2, FormulaText:=Range("$BW$203:$BW$222")
SolverSolve UserFinish:=True
SolverFinish KeepFinal:=1
End Sub
Any ideas?
Thanks!
Помогите пожалуйста решить проблему добавления ограничений в Solver посредством кода на VBA. Суть проблемы в том, что при вводе ограничений посредством редактора VBA и последующем запуске Solver, выскакивает сообщение «Поиск решения: непредвиденная внутренняя ошибка или достигнут предел допустимой памяти». При анализе проблемы выяснилось, что такая ошибка появляется только в том случае, когда я ввожу дробные ограничения. Если целые числа, то все ОК. Привожу пример кода для пояснения:
Sub AddLimitSolver()
For i = 3 To 32
Application.Run "Solver.xla!SolverAdd", Cells(i, 1), 1, Cells(i, 3)
Application.Run "Solver.xla!SolverAdd", Cells(i, 1), 3, Cells(i, 2)
Next i
End Sub
Привет.
Возникла проблема — есть файл МС Экселя, в котором задаются некоторые данные и вызывается надстройка «Поиск решения».
Для универа надо это оформить через Дельфи — я решил прикрутить дельфийский интерфейс к Экселю.
Сделал заполнение исходных данных — все работает нормально, теперь надо вызвать надстройку.
Искал везде — не нашел как ее вызвать напрямую, тогда сделал макрос с вызовом настройки и стал дергать его из дельфи. Вот тут-то и появилась проблема: если я зову макрос просто из Экселя, то все отрабатывает нормально. Если же я зову его из свой программы, то получаю сообщение «Поиск решения: непредвиденная внутренняя ошибка или достигнут предел доступной памяти».
Вопрос: кто-нибудь знает чего ей надо и как это ей дать?
Здравствуйте, Serg32M, Вы писали:
SM>Возникла проблема — есть файл МС Экселя, в котором задаются некоторые данные и вызывается надстройка «Поиск решения».
SM>Для универа надо это оформить через Дельфи — я решил прикрутить дельфийский интерфейс к Экселю.
SM>Сделал заполнение исходных данных — все работает нормально, теперь надо вызвать надстройку.
SM>Искал везде — не нашел как ее вызвать напрямую, тогда сделал макрос с вызовом настройки и стал дергать его из дельфи. Вот тут-то и появилась проблема: если я зову макрос просто из Экселя, то все отрабатывает нормально. Если же я зову его из свой программы, то получаю сообщение «Поиск решения: непредвиденная внутренняя ошибка или достигнут предел доступной памяти».
SM>Вопрос: кто-нибудь знает чего ей надо и как это ей дать?
Ты бы хоть пример кода кинул…. где ото вылазит…
… << RSDN@Home 1.1.4 beta 3 rev. 185>>
Здравствуйте, Vodyamba, Вы писали:
V>Здравствуйте, Serg32M, Вы писали:
SM>>Возникла проблема — есть файл МС Экселя, в котором задаются некоторые данные и вызывается надстройка «Поиск решения».
SM>>Для универа надо это оформить через Дельфи — я решил прикрутить дельфийский интерфейс к Экселю.
SM>>Сделал заполнение исходных данных — все работает нормально, теперь надо вызвать надстройку.
SM>>Искал везде — не нашел как ее вызвать напрямую, тогда сделал макрос с вызовом настройки и стал дергать его из дельфи. Вот тут-то и появилась проблема: если я зову макрос просто из Экселя, то все отрабатывает нормально. Если же я зову его из свой программы, то получаю сообщение «Поиск решения: непредвиденная внутренняя ошибка или достигнут предел доступной памяти».
SM>>Вопрос: кто-нибудь знает чего ей надо и как это ей дать?
V>Ты бы хоть пример кода кинул…. где ото вылазит…
Макрос в Ёкселе
…
SolverOk SetCell:=»$D$21″, MaxMinVal:=1, ValueOf:=»0″, ByChange:=»$D$9:$F$9″
SolverSolve UserFinish:=True
…
Вызов из Дельфи
xl: TExcelApplication;
…
frmMain.xl.Run(‘MacroForDelphi’); // вот тут оно и говорит такую фигню
…
Программное обеспечение
Проблема с Поиском решения в MS ExcelПри решении задачи на оптимизацию вылезает ошибка «Поиск решения: непредвиденная внутренняя ошибк или достигнут предел доступной памяти». С памятью все нормально вроде, больше никакая прога не жалуется. Excel решение находит но при попытке создать отчеты по результатам и по устойчивости выдает эту ошибку.
Может кто сталкивался? Как исправить? (
Попроси больше объяснений
Следить
Отметить нарушение
Автор: Гость
Здравствуйте.
Передо мной встала такая вот проблема:
Хочу вызвать из Delphi Поиск решения в Excel. Для этого написал макрос, запускающий поиск решения, и
сохранил в шаблоне книги Excel.
Из Delphi запускаю Excel:
XLApp:=CreateOleObject(«Excel.Application»);
Открываю шаблон:
Workbook:=XLApp.Workbooks.Add(«c:TPsolver1.xlt»);
Передаю необходимые данные в Excel и пытаюсь запустить макрос:
OLEVariant(XLApp).Run(«Module1.runsolver»);
Как только дело доходит до выполнения макроса, появляется сообщение об ошибке:
«Поиск решения: непредвиденная внутренняя ошибка или достигнут предел памяти».
Далее: Сохранаяем книгу. Закрываем. Открываем вручную. Запускаем макрос. Всё работает.
Вопрос: Возможна ли работа из Delphi c Solver»ом Excel через OLEAutomation? И вообще возможно ли всё
это в принципе? И если возможно, то как?
Спасибо за внимание. Буду рад любым комментариям.
