Я пытаюсь найти максимальную отдачу для простого портфеля с помощью Solver. Использование Solver на листе непосредственно работает разумно, однако это не происходит, когда команды заданы в VBA. Вместо этого (как вы можете видеть из screengrab) он игнорирует одно из ограничений (сумма весов, рассчитанная в T10, должна = 1). Интересно, что работает хорошо, если я меняю третью строчку, чтобы сказать:Excel Solver Игнорирование ограничений в VBA
SolverAdd CellRef:="$T$10", Relation:=2, FormulaText:="100"
или любое другое число, кроме «1». (Он также может игнорировать другое ограничение, но я не могу это проверить). таблица выглядит следующим образом:
И мой код:
Sub FindRange()
SolverReset
SolverOk SetCell:="$T$7", MaxMinVal:=1, ValueOf:="0", ByChange:="$O$10:$R$10"
SolverAdd CellRef:="$T$10", Relation:=2, FormulaText:="1"
SolverAdd CellRef:="$O$10:$R$10", Relation:=3, FormulaText:="0"
SolverSolve UserFinish:=True
SolverFinish KeepFinal:=1
Range("T9").Value = Range("T7").Value
End Sub
Любые предложения с благодарностью приветствуется!
Код выглядит хорошо для меня. Кажется ли это так же, как и VBA против VBA? Может быть, попробуйте добавить «CellRef' перед« SolverOK »? –
Может быть, попробуйте использовать только 'Формул-текст: = 1'?(без двойных кавычек) я упоминаю это, потому что [код в MSDN] (http://msdn.microsoft.com/en-us/library/office/ff838657.aspx) не использует кавычки. –
Спасибо. Удаление двойных кавычек помогает (т. Е. Оно остается ниже 10), однако теперь оно игнорирует «$ O $ 10: $ R $ 10» должно равняться 0. Таким образом, оба ограничения игнорируются – Mary