VBA: SolverAdd Игнорирование ограничений - PullRequest
0 голосов
/ 27 августа 2011

Я пытаюсь настроить решатель для каждого запуска макроса, но кажется, что он игнорирует некоторые ограничения, но не все из них по какой-то причине.

SolverReset
SolverOk SetCell:="$N$15", MaxMinVal:=3, ValueOf:=0, ByChange:=Range("i3", Range("i3").End(xlDown)), _
Engine:=3, EngineDesc:="Evolutionary"
SolverAdd CellRef:=Range("k3", Range("k3").End(xlDown)), Relation:=1, FormulaText:="1"
SolverAdd CellRef:="$P$12:$P$13", Relation:=1, FormulaText:="$R$12:$R$13"
SolverAdd CellRef:="$P$12:$P$13", Relation:=3, FormulaText:="$N$12:$N$13"
SolverAdd CellRef:=Range("n3", Range("n3").End(xlDown)), Relation:=2, FormulaText:="1"
SolverAdd CellRef:=Range("i3", Range("i3").End(xlDown)), Relation:=5, FormulaText:="binary"
SolverSolve

Он игнорирует толькоограничения для диапазонов Range ("n3", Range ("n3"). End (xlDown)) и Range ("k3", Range ("k3"). End (xlDown))

Любая помощь будетбыть оцененным

спасибо!

Ответы [ 2 ]

1 голос
/ 27 августа 2011

Из справки XL:

"Отношение требуется целое число. Арифметическое соотношение между левой и правой сторонами ограничения. Если вы выбираете 4 или 5 , CellRef должен ссылаться на настраиваемые (изменяющиеся) ячейки, а FormulaText не указывается . "

Ваш последний диапазон имеет отношение = 5, поэтому вы не можете включить FormulaText.

0 голосов
/ 12 июля 2014

У меня была та же проблема, и FormulaText для диапазона с отношением = 5 не была проблемой, но проблема была в FormulaText = "1". Каждый SolverAdd, имеющий FormulaText = "1", игнорировался в решателе. Решением для меня было просто добавить «1» в одну ячейку (например, E9) и установить FormulaText = «$ E $ 9». Возможно, есть лучшее решение, но это было хорошо для меня ...

...