Решатель цикла на листах с использованием макроса

мои ограниченные знания знали, что я могу использовать цикл For Each для просмотра всех рабочих листов рабочей книги, и я могу записать решатель в виде макроскрипта. Однако, когда я пытался объединить эти два метода вместе, чтобы активировать и запустить решатель для каждого листа, он не работал должным образом (иногда он работает, но не на всех листах, а иногда он не работает вообще). Нет контроля или обратной связи о том, почему этот код работает на некоторых листах, а не на всех листах. Для рабочих листов, которые работали, когда я проверяю ограничения, есть 18 (количество моих рабочих листов) одинаковых условий «$ J $ 4: $ J $ 5 ‹ = 1» вместо только одного условия для каждого рабочего листа. Есть ли способ улучшить эту ситуацию? Заранее спасибо. Вот мой код:

Sub Solver()
Dim wb As Workbook: Set wb = Workbooks("A.xlsx")
Dim sh As Worksheet

For Each sh In wb.Worksheets

SolverOk SetCell:="$J$8", MaxMinVal:=2, ValueOf:=0, ByChange:="$J$4:$J$5", _
Engine:=1, EnineDesc:="GRG Nonlinear"

SolverAdd CellRef:="$J$4:$J$5", Relation:=1, FormulaText:="1"

SolverOk SetCell:="$J$8", MaxMinVal:=2,Valueof:=0, ByChange:="$J$4:$J$5", _
Engine:=3, EnineDesc:="Evolutionary"
SolverOk SetCell:="$J$8", MaxMinVal:=2,Valueof:=0, ByChange:="$J$4:$J$5", _
Engine:=3, EnineDesc:="Evolutionary"

SolverSolve True

Next sh

End Sub

person Shane    schedule 14.04.2021    source источник
comment
Пробовали ли вы пройти через (F8 в VBE) свою подпрограмму Solver, чтобы увидеть, ведет ли код ожидаемое? Если нет, я бы прошел каждую итерацию For...Next и проверил, что делает код вместе с тем, что происходит на целевом листе.   -  person Samuel Everson    schedule 15.04.2021
comment
Привет @SamuelEverson, нет, я еще этого не делал. Я проверю с помощью F8. Спасибо, что предложили.   -  person Shane    schedule 15.04.2021


Ответы (1)


После недельного расследования и перебора различных кодов. Я, наконец, заметил, что это пользовательская форма делает команду добавления ограничений неудачной. После ручного удаления этих пользовательских форм код работает отлично и обеспечивает необходимую мне обратную связь. Если у кого-то есть похожая проблема, проверьте, нет ли в ваших листах каких-либо необычных надстроек.

person Shane    schedule 19.04.2021