当我通过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