Привет, У меня есть следующий код, который запускает одну оптимизацию с помощью решателя, который я хотел бы запускать в цикле. единый код пробег:Loop With Solver VBA
Sub Macro4
SolverReset
SolverOk SetCell:="$D$36", MaxMinVal:=2, ValueOf:="0", ByChange:="$D$7:$R$7"
SolverAdd CellRef:="$S$7", Relation:=2, FormulaText:="1"
SolverAdd CellRef:="$D$7:$R$7", Relation:=1, FormulaText:="$D$6:$R$6"
SolverAdd CellRef:="$D$7:$R$7", Relation:=3, FormulaText:="$D$5:$R$5"
SolverAdd CellRef:="$D$37", Relation:=2, FormulaText:="$D$41"
SolverOk SetCell:="$D$36", MaxMinVal:=2, ValueOf:="0", ByChange:="$D$7:$R$7"
SolverSolve UserFinish:=True
SolverFinish KeepFinal:=1
Range("D37").Select
Selection.Copy
Range("E41").Select
ActiveSheet.Paste
Range("D36").Select
Application.CutCopyMode = False
Selection.Copy
Range("F41").Select
ActiveSheet.Paste
Range("D36").Select
Range("D7:R7").Select
Application.CutCopyMode = False
Selection.Copy
Range("I41").Select
ActiveSheet.Paste
End Sub
Решатель оптимизирует до значения в $ D $ 41 (среди других ограничений), а затем вставляет решения путем копирования пару отдельных клеток и массив, а затем вставить их вместе с оригиналом (т.е. в строке 41.) Это хорошо работает. Однако я пытаюсь заставить его работать для столбца целевых ячеек, заставляя его оптимизировать каждую ячейку в столбце, в свою очередь, используя цикл (или лучшую альтернативу), прежде чем вставлять решения вместе с ним, как и для код одиночного запуска. Например, я пытаюсь объединить его с помощью следующего кода
Sub Complete()
'
'
'
Dim Count As Double
Dim Count2 As Integer
Dim increment As Double
increment = Range("C43").Value
strt = Range("C41").Value
fnsh = Range("C42").Value
For Count = strt To fnsh Step increment
Count2 = Count/increment
Range("D41").Offset(Count2, 0) = Count
Next Count
End Sub
, который генерирует столбец целевых значений (от STRT к fnsh используя приращение) для Solver, чтобы взять и использовать вместо (я думаю !!!) часть, которая говорит FormulaText:="$D$41"
. .. Однако я бег в различные ошибки и жалобы (метод 'Range' в Object'_Global'failed- подчеркивающей линии "Range (E41 + Count") Выберите Полный код у меня есть:
`Sub Macro5()
Dim Count As Double
Dim Count2 As Integer
Dim increment As Double
increment = Range("C43").Value
strt = Range("C41").Value
fnsh = Range("C42").Value
For Count = strt To fnsh Step increment
Count2 = Count/increment
Range("D41").Offset(Count2, 0) = Count
SolverReset
SolverOk SetCell:="$D$36", MaxMinVal:=2, ValueOf:="0", ByChange:="$D$7:$R$7"
SolverAdd CellRef:="$S$7", Relation:=2, FormulaText:="1"
SolverAdd CellRef:="$D$7:$R$7", Relation:=1, FormulaText:="$D$6:$R$6"
SolverAdd CellRef:="$D$7:$R$7", Relation:=3, FormulaText:="$D$5:$R$5"
SolverAdd CellRef:="$D$37", Relation:=2, FormulaText:="$D$41:$D$41+Count"
SolverOk SetCell:="$D$36", MaxMinVal:=2, ValueOf:="0", ByChange:="$D$7:$R$7"
SolverSolve UserFinish:=True
SolverFinish KeepFinal:=1
Range("D37").Select
Selection.Copy
Range("E41+Count").Select
ActiveSheet.Paste
Range("D36").Select
Application.CutCopyMode = False
Selection.Copy
Range("F41+Count").Select
ActiveSheet.Paste
Range("D7:R7").Select
Application.CutCopyMode = False
Selection.Copy
Range("I41+Count").Select
ActiveSheet.Paste
Next Count
End Sub`
I просто нужно, чтобы он обновил, какую ячейку он оптимизирует (и помещает его в ограничение решателя), а затем обновляет, какие ячейки копировать и куда их вставлять. Любая помощь будет принята с благодарностью.
Как выглядит ваш сценарий с петлей вокруг него? Каковы точные ошибки, с которыми вы сталкиваетесь и в каких направлениях? Вы искали ошибки и пытались исправить их? Вы пытались просто изменить «$ D $ 41» на что-то еще с кодом и как это выглядело? –
У меня возникли такие ошибки, как «Ошибка компиляции: ожидаемый конец заявления». Но полный код теперь говорит только о том, что метод «range» объекта object_global не удался и выделяет RangeXXX.Выберите код, который, как я предполагаю, имеет что-то с тем, как я пытаюсь заставить его вставить нужные ячейки. Я обновил вопрос с помощью нового кода. – Mary
Вы должны запустить код в режиме отладки, чтобы вы могли видеть, какая строка он падает, а какие переменные имеют значения, отличные от ожидаемых. Сделайте это, выбирая линию Sub xxx первого суб, который вы запускаете, а затем нажмите F9, теперь у нее будет цветной фон и пуля перед ним. Когда вы сейчас запускаете запуск кода, он остановится там. С помощью F8 вы можете переходить через код по строкам. При наведении курсора мыши вы можете проверить значения всех переменных. Также рекомендуется активировать локальное окно просмотра, чтобы увидеть все локальные переменные и объекты. –