2015-12-02 187 views
-1

我正在尝试使用Excel中的求解器函数编写Excel循环宏。在循环VBA宏中使用Excel解算器功能

在循环中的每次迭代之后,我需要在工作表上重新计算公式,但是似乎在循环过程中某些时候计算被设置为手动,即使我没有对其进行编码(至少不是故意) 。

理想情况下,我希望我的工作簿在使用求解器函数之前在我的循环开始时计算所有公式。

我附上了我目前拥有的代码。

任何帮助将不胜感激。

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行:'Sheets(“DK Lineup”)。Range(“Lineup “)复制(新行)单元格(T,1).PasteSpecial xlPasteValues' –

+0

@ScottHoltzman我已经尝试在循环之前使用Application.Calculation = xlCalculationAutomatic,但似乎不起作用。最后我得到了这段代码,因为当我完成运行宏时,计算总是被设置为手动的,这导致我相信在循环过程中的某个时刻计算被设置为手动。 – VincentR

+0

你是否逐行逐行查看并实际上看到哪一行将calc设置为manual? –

回答

0

难道ScreenUpdating = False是问题吗?我记得有一次这个问题。

该代码可能试图与显示的内容一起工作,该内容可能是在幕后计算的,但似乎没有计算出来。 在ScreenUpdating语句之前尝试Rem(')以检查此操作...记住要步进到... = True行来运行该行以确保SU被设置为更新。希望有道理