Я новичок в VBA и пытаюсь реализовать Excel Solver Loop. До сих пор я не нашел решения для моей конкретной проблемы, поэтому я надеюсь, что смогу помочь.Excel VBA Loop с Excel Solver с копированием значения ячейки в зависимости от определенного значения ячейки
Так что я точно делать не является следующее:
- Использование Solver для минимизации объективной клетки (в данном случае B16)
- Изменение значения ячейки (C2), столько раз, сколько нужно, до тех пор, (значение становится больше или меньше в зависимости от значения E8, что может быть 1 или 0)
- Копирование значения этой ячейки в предопределенной ячейке (F8 или G8, в зависимости от
Значение E8, что может быть 1 или 0) - Изменение ячейки V ALUE (C2), чтобы его начальное значение в начале
- Переключение на следующую ячейку ниже (С3) и изменить значение ячейки до тех пор, пока раствор не изменяет
- Копирование это значение ячейки в предварительно определенной ячейке (F9 или G9, в зависимости от
Value от E9, что может быть 1 или 0)
Таким образом, до этапа 4 он работает отлично, но только для одной ячейки. Я хочу иметь возможность теперь спуститься по клетке. Поэтому я попробовал это, выполнив i для подсчета строк, но всегда получал сообщения по умолчанию.
Так вот мой код:
Sub Makro6()
Dim rng As Range, cell As Range
Set rng = Range("C2")
If Range("E8").Value = 1 Then
Do
For Each cell In rng
cell.Value = cell.Value + 1
Next cell
SolverOk SetCell:="$B$16", MaxMinVal:=2, ValueOf:=0, ByChange:="$C$8:$E$9", _
Engine:=2, EngineDesc:="Simplex LP"
SolverOk SetCell:="$B$16", MaxMinVal:=2, ValueOf:=0, ByChange:="$C$8:$E$9", _
Engine:=2, EngineDesc:="Simplex LP"
SolverSolve True
Loop Until Range("E8").Value = 0
'Copying cell Value, when Solver solution switched in certain cell depending if it before was 1 or 0
Range("C2").Select
Selection.Copy
Range("F8").Select
ActiveSheet.Paste
'Copying start value back into cell after solver loop
Range("B2").Select
Selection.Copy
Range("C2").Select
ActiveSheet.Paste
Else
Do
For Each cell In rng
cell.Value = cell.Value - 1
Next cell
SolverOk SetCell:="$B$16", MaxMinVal:=2, ValueOf:=0, ByChange:="$C$8:$E$9", _
Engine:=2, EngineDesc:="Simplex LP"
SolverOk SetCell:="$B$16", MaxMinVal:=2, ValueOf:=0, ByChange:="$C$8:$E$9", _
Engine:=2, EngineDesc:="Simplex LP"
SolverSolve True
Loop Until Range("E8").Value = 1
'Copying cell Value, when Solver solution switched in certain cell depending if it before was 1 or 0
Range("C2").Select
Selection.Copy
Range("G8").Select
ActiveSheet.Paste
'Copying start value back into cell after solver loop
Range("B2").Select
Selection.Copy
Range("C2").Select
ActiveSheet.Paste
End If
End Sub
Большое спасибо заранее за вашу помощь :)
Что вы подразумеваете под «сообщениями по умолчанию»? – SJR
Честно говоря, я не знаю, как реализовать i, чтобы ячейки могли меняться. Я попытался реализовать его в Range: Set rng = Range (i, 3), но он сообщает мне по умолчанию 1004, что метод для объекта global failed – Mat
Хммм, это не совсем отвечает на мой вопрос. Вы говорите, что хотите выполнить шаги 1-3 для C2, а затем повторить для C3 и так далее? Если да, то куда идут результаты последовательных итераций? – SJR