Как автоматизировать решатель в VBA

Я знаю, что этот вопрос задавали миллион раз, но я все еще пытаюсь заставить его работать после поиска решений.

Я пытаюсь максимизировать значение в столбце M, изменяя переменные в столбцах с I по K с ограничениями 0 ‹I: K› 1, начиная со строки 9. Мне нужно это повторить для 330 строк. Я использую 10 как доказательство того, что код работает с несколькими строками и расширит его после проверки.

Кажется, что это повторяется для нескольких строк, но что-то в синтаксисе вызывает ошибку в модели.

Я получаю сообщение об ошибке:

Ошибка в модели. Убедитесь, что переменные и ограничения действительны. Возможно, некоторые ячейки, не являющиеся переменными, помечены как целые, двоичные или все разные.

Я практически ничего не знаю о VBA, поэтому, пожалуйста, опишите его и помогите мне понять этот синтаксис и формат исправлений кода. Спасибо,

Sub Macro2()

Dim i As Integer

For i = 0 To 10

    Sheets("Error").Select
    SolverReset
    
    SolverAdd CellRef:="$I:$K" & i, Relation:=1, FormulaText:="1"
    SolverAdd CellRef:="$I:$K" & i, Relation:=3, FormulaText:="0"
    SolverOk SetCell:="$M" & i, MaxMinVal:=1, ValueOf:=0, ByChange:="$I:K" & i, _
        Engine:=3, EngineDesc:="Evolutionary"
    SolverOk SetCell:="$M" & i, MaxMinVal:=1, ValueOf:=0, ByChange:="$I:$K" & i, _
        Engine:=3, EngineDesc:="Evolutionary"
    SolverSolve UserFinish = True
    Next i
    
End Sub

Формат Excel


person Adam    schedule 25.02.2021    source источник
comment
Я думаю, вам нужно исправить CellRefs, у вас есть $ I: $ K & i, но я думаю, что это должно быть $ I & i &: $ K & i то же самое для ByChange.   -  person majjam    schedule 26.02.2021
comment
Я думаю, что это проблема, но я не могу найти правильный синтаксис. В вашем мне, похоже, не нравится символ &: поэтому я попытался разделить его на этот ByChange: = $ I & i & $ J & i & $ K & i. Нет синтаксической ошибки, но возникает та же ошибка в модели   -  person Adam    schedule 26.02.2021


Ответы (1)


Возможно, что-то вроде этого.

Sub Macro1()
    
Dim i As Integer
For i = 1 To 10

    SolverOk SetCell:="$A$1", MaxMinVal:=3, ValueOf:=60, ByChange:="$A$" & i & ":$D$" & i, _
        Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverOk SetCell:="$A$1", MaxMinVal:=3, ValueOf:=60, ByChange:="$A$" & i & ":$D$" & i, _
        Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve

Next i

End Sub

Не забудьте указать ссылку на Solver.

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

В редакторе VBA ... Перейдите в Инструменты - ›Ссылки -› и выберите Решатель. Щелкните ОК.

person ASH    schedule 27.02.2021