VBA Солвер не зацикливается

Я пытаюсь использовать решатель для нескольких столбцов (точное количество столбцов определяется пользователем). Посмотрев на вопросы здесь, я все еще не могу найти, что не так с моим кодом (я довольно плохо знаком с VBA). Когда я запускаю его, он отлично работает в течение первого года, но не относится к последующим годам.

Dim wsFM_B3 As Worksheet
Set wsFM_B3 = ThisWorkbook.Worksheets("xxxx_B3")

Dim wsCharts As Worksheet
Set wsCharts = ThisWorkbook.Worksheets("Charts")

Dim j As Integer

For j = 0 To Range("CC_Reduction_Years").Value
    SolverReset
    SolverAdd CellRef:=wsFM_B3.Range("E_Start").Offset(0, j), Relation:=3, FormulaText:=wsCharts.Range("Min_E")
    SolverAdd CellRef:=wsFM_B3.Range("Bank_Start").Offset(0, j), Relation:=3, FormulaText:=wsFM_B3.Range("Cash_B3")
    SolverOk SetCell:=wsFM_B3.Range("PoY_Start").Offset(0, j).Address, MaxMinVal:=3, ValueOf:=0, ByChange:=wsCharts.Range("CC_Base_Start").Offset(0, j).Address, Engine _
        :=1, EngineDesc:="GRG Nonlinear"
    SolverSolve True
  Next j
End Sub

Вот то, что мойxxxx_B3 лист выглядит так:

На листе «Диаграммы» есть только ячейки, содержащие целевые значения для первой строки, ограничения и количество лет.

 John Doe28 июл. 2016 г., 10:55
Извините, я не могу, это профессиональные данные. Код работает без сбоев (без сообщений об ошибках), он просто не применяется после первого года.
 John Doe28 июл. 2016 г., 11:36
Я добавил изображение файла
 GCSDC30 июл. 2016 г., 22:36
Цикл for работает как положено? В зависимости от стоимостиRange("CC_Reduction_Years").Value цикл может быть выполнен только один раз, что объясняет работу только в течение первого года. Вы можете проверить это поведение путем отладки кода.
 John Doe28 июл. 2016 г., 11:16
Я создал файл, но не могу найти способ загрузить его в обсуждение ... (вопрос новичка)
 GSerg28 июл. 2016 г., 12:17
Это должно быть потому, что у вас есть несколько листов, иAddress не включает имя листа по умолчанию. Попробуйте использоватьAddress(true, true, xlA1, true).
 GSerg28 июл. 2016 г., 11:43
По моему опыту Солвер может делать неправильные вещи, когда фактическийRange объекты передаются дляCellRef и тому подобное. добавлять.Address после каждого, чтобы убедиться, что вы передаете адреса в виде строк.
 John Doe28 июл. 2016 г., 11:51
Спасибо за редактирование, кстати. я добавил.Adress после каждого, как вы предложили, но теперь мой макрос даже не работает в течение 1-го года: s
 John Doe28 июл. 2016 г., 13:32
Спасибо, что нашли время ответить на это. Я попробовал то, что вы предложили. Макрос работает без проблем, но не меняет номера.
 GSerg28 июл. 2016 г., 14:15
Тогда, вероятно, не найдет решения. Откройте Solver вручную после запуска marco и посмотрите, что есть и работает ли он.
 Tom K.28 июл. 2016 г., 10:34
Не могли бы вы показать нам некоторые из ваших данных? Код просто останавливается или выдает ошибку?
 Tom K.28 июл. 2016 г., 11:03
Это не должно быть настоящими данными. Просто приведите пример вашей структуры данных, как ваша таблица "выглядит".

Ответы на вопрос(0)

Ваш ответ на вопрос