當我通過VBA使用Solver時,我得到了這個非常奇怪的錯誤。我的目標和改變單元格在表1中,並且每當我得到一個優化解決方案時,我想將優化後的單元格複製到表格2(我每次優化函數發生更改時都會這樣做幾次)。如果我在我的求解器程序中添加了Worksheets(1).Select
,那麼求解器工作正常,並將值粘貼到工作表2。但是,如果我刪除了這條語句並且選擇了表2而不是表1,那麼我在狀態欄中看到類似「設置問題...」的東西,然後我得到了錯誤的結果,而且我的一個奇怪的「0」工作表2.我使用VBA調試器,發現這個「0」值出現在聲明Call SolverSolve(True)
之後,所以我懷疑這個bug只是在Solver中。僅當活動工作表駐留在更改單元格和目標單元格時,是否必須運行Solver?或者我在哪裏做錯了?在另一張紙上處理VBA解算器時出現奇怪的錯誤
Option Explicit
Function SAMPLEONCE()
'Create one sample from 2500 MI data in worksheets("P2 MI Data"), the sample is
'stored in worksheets("P2 Sample")
Const n As Long = 2500
Dim temp As Long
Randomize
temp = Int(Rnd * 2500) + 1
SAMPLEONCE = Worksheets("P2 MI Data").Cells(temp + 1, 1).Resize(1, 6)
End Function
Sub SolveItOnce()
Call solverreset
Call solverok(Worksheets("P2 Sample").Range("Output"), 2, 0, Worksheets("P2 Sample").Range("Input"))
Call solversolve(True)
End Sub
Sub SolveIt()
Dim i As Long, j As Long, k As Long
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Worksheets("P2 Sample").Activate
For i = 1 To 100
'Sampling
For j = 1 To 1000
Worksheets("P2 Sample").Range("Sample").Rows(j).FormulaArray = "=SAMPLEONCE()"
Next j
Worksheets("P2 Sample").Range("Sample").Copy
Worksheets("P2 Sample").Range("Sample").PasteSpecial Paste:=xlPasteValues
'Call Solver
For k = 1 To 3
Call SolveItOnce
Next k
'Output result
Worksheets("P2 Sample").Range("A2:G2").Copy
Worksheets("P2 Result").Range("A1:G1").Offset(i, 0).PasteSpecial Paste:=xlPasteValues
Next i
Application.Calculation = xlCalculationAutomatic
End Sub
在VBA中有使用Solver的幾個怪癖。請參閱[這個問題]的答案(http://stackoverflow.com/questions/36671991/use-solver-in-vba-with-loop-in-rows)。有這樣的事情 - 不要使用SolverReset,使地址正確,不要使用'EngineDesc',這都會影響你正在做的事情。 – OldUgly
我可以專門針對我的問題發表評論嗎? – Nicholas
不知道我明白 - 當然你可以評論你的問題。如果您發佈了一段代碼樣本,我可以提供更直接的反饋。 – OldUgly