2015-12-02 77 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被設置爲更新。希望有道理