2015-12-02 3 views
-1

Я пытаюсь написать макрос цикла Excel, используя функцию Solver в excel.Использование функции Excel solver в петлевом макросе VBA

После каждой итерации в цикле мне нужны формулы на листе, чтобы пересчитать, однако кажется, что когда-то во время цикла вычисление устанавливается на ручное, даже если я не закодировал его для этого (по крайней мере, не намеренно) ,

В идеале я хотел бы, чтобы моя книга вычислила все формулы в начале моей петли до ее использования с помощью функции solver.

Я добавил код, который у меня есть.

Любая помощь будет высоко оценена.

Sub Lineups_Generator() 
' 
' Lineups_Generator Macro 
' 
' Keyboard Shortcut: Ctrl+q 

    Application.ScreenUpdating = False 

    Sheets("DK Lineups").Select 
    Range("Output").Select 
    Selection.ClearContents 

    E = Range("NumberOFLineups").Value 
    T = 7 


    For I = 1 To E 

    Calculate 


    SolverOk SetCell:="$Q$12", MaxMinVal:=1, ValueOf:=0, ByChange:="$H$4:$H$203", _ 
     Engine:=2, EngineDesc:="Simplex LP" 
    SolverSolve Userfinish:=True 

    Sheets("DK Lineups").Select 
    Range("Lineup").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Cells(T, 1).Select 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 

    T = T + 1 

    Next 

    Application.Calculation = xlCalculationAutomatic 
    Application.ScreenUpdating = True 


End Sub 
+0

Почему бы не переместить это перед циклом: 'Application.Calculation = xlCalculationAutomatic' ... Кроме того, скопировать копию можно записать в 2 строки:' Таблицы («DK Lineup»). Range («Lineup» ") Копировать (новая строка) Ячейки (T, 1) .PasteSpecial xlPasteValues' –

+0

@ScottHoltzman Я пробовал использовать Application.Calculation = xlCalculationAutomatic до цикла, но это, похоже, не работает. У меня был этот код в конце, потому что, когда я закончил работу с макросом, вычисления всегда были настроены на ручной, что заставляет меня поверить, что в какой-то момент цикла цикл вычисляется как ручной. – VincentR

+0

Вы пропустили его по очереди и действительно видите, какая строка задает значение calcs to manual? –

ответ

0

Это проблема ScreenUpdating = False? Я помню, что эта проблема была однажды.

Возможно, код может работать с отображаемым, который, возможно, был рассчитан за кулисами, но, по-видимому, не рассчитан. Попробуйте Rem (') перед операциями ScreenUpdating, чтобы проверить это ... помня, чтобы перейти к ... = True, чтобы запустить только эту строку, чтобы гарантировать, что SU настроен на обновление. Надеюсь, что имеет смысл

Смежные вопросы