我有一个工作簿,我用来解决非线性方程组,然后在图表上显示解决方案。该图表具有大量内容(基本上是解决几个标准情况的方程组的结果),其引用了大约1200个单元格的表格。该内容是静态的,因此为了美观,我将计算表保存在sheet1上,并将图表保存在sheet2上。
然后在图表表格中,我允许用户输入两个单元格,这两个单元格在sheet1的计算中被引用,以构建方程组的三个动态实例。非常轻量级的解算器一次处理一个。
我在sheet2上使用Worksheet_Change事件来监视用户修改这两个单元格,然后调用运行解算器的子。
事件代码:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If (Target.Address = "$C$3") Or (Target.Address = "$D$3") Then
Application.ScreenUpdating = False
Application.EnableEvents = False
SolverEQN 178, 180
Application.ScreenUpdating = True
Application.EnableEvents = True
End If
End Sub
解算器代码:
Sub SolverEQN(rw, rwend As Integer)
Dim iter As Integer
For iter = rw To rwend
If Sheets(1).Cells(iter, 14) <> 0 Then
SolverReset
SolverOptions AssumeNonNeg:=False
SolverOK SetCell:="'Sheet1'!$N$" & iter, MaxMinVal:="3", ValueOf:="0", ByChange:="'Sheet1'!$H$" & iter
SolverSolve True
End If
Next iter
End Sub
这是遇到问题的地方。求解器在sheet2上运行,尽管我将它指定为在sheet1上运行,这意味着方程系统不存在于应有的位置,并且求解器在我的活动工作表中间快速优化为0 = 0。
我找到了两种解决方法:
1 - 在运行解算器之前将我的活动表设置为sheet1,然后在求解器运行后将活动表设置回sheet2。这会导致短暂的停顿和屏幕闪烁,因此体验不会是无缝的&#39;对于用户。
2 - 在图表上解决动态方程组并以粗略的方式隐藏它们(白色字体,将它们放在我的图表后面,YUCK!)。
如果必须的话,我会用选项2处理这个问题,但你是否有创意的人对如何在我的计算表上保留计算有任何想法?
非常感谢。
干杯。