Excel多场景运行GoalSeek后存储变更值的VBA宏故障问询
VBA GoalSeek 结果写入False问题修复方案
核心问题原因
- 常量
tolerance类型定义错误:你将它声明为Long长整型,赋值0.01时会被VBA自动强制转换为整数0,导致你的容错判断实际变成要求B95的值和目标值完全相等,只要有微小误差就会走Else分支写入False - 变量
PurchasePrice类型定义错误:声明为Integer整数型,若B4的求解结果为小数会被自动取整,导致存储结果失真 - 写入位置偏差(可选):你当前循环k为8789,写入的是P87P89,如果需要写入P97~P99对应三个场景,需要调整写入行的索引
修正后代码
Sub Button1_Click() Dim k As Integer Dim PurchasePrice As Double ' 改为Double类型适配小数取值 Const tolerance As Double = 0.01 ' 改为Double类型支持小数容错范围 For k = 87 To 89 Range("B95").GoalSeek Goal:=Cells(k, "O"), ChangingCell:=Range("B4") If Cells(95, "B").Value <= Cells(k, "O") + tolerance And Cells(95, "B").Value >= Cells(k, "O") - tolerance Then PurchasePrice = Range("B4").Value ' 要写入P97~P99就把下面的k改成k+10即可 Cells(k, "P").Value = PurchasePrice Else Cells(k, "P") = False End If Next k End Sub
额外说明
GoalSeek方法执行完成后,目标单元格和调整单元格的值会自动更新,不需要额外加等待逻辑,直接读取即可正常存入结果。
内容的提问来源于stack exchange,提问作者Breadguy
相关产品推荐
相关产品推荐

