Excel VBA批量单变量求解报错Runtime 1004求助
问题分析与修正方案
原代码的核心问题
- 错误将
targetCell和changingCell绑定到第一个工作表,未针对循环中的当前工作表获取对应单元格 GoalSeek方法调用语法错误:需由目标单元格调用该方法,传入目标值(0)和要修改的单元格;原代码参数顺序与对象引用均有误- 未将I6中的文本地址转换为当前工作表的Range对象
修正后的VBA代码
Sub RunGoalSeekOnAllSheets() Dim ws As Worksheet Dim targetAddr As String Dim targetRange As Range Dim changingRange As Range ' 从第三个工作表开始循环处理 For Each ws In ThisWorkbook.Worksheets If ws.Index >= 3 Then ' 获取当前工作表中I6存储的目标单元格地址文本 targetAddr = ws.Range("I6").Value ' 将文本地址转换为当前工作表的Range对象 Set targetRange = ws.Range(targetAddr) ' 获取当前工作表中要修改的单元格F4 Set changingRange = ws.Range("F4") ' 执行单变量求解:将目标单元格值设为0,通过修改F4实现 targetRange.GoalSeek Goal:=0, ChangingCell:=changingRange End If Next ws End Sub
关键说明
- 循环内每次针对当前工作表
ws获取对应单元格,确保操作对象正确 - 直接指定单变量求解的目标值为0,匹配需求
- 无需激活工作表,直接通过工作表对象绑定Range,避免激活操作引发的错误
内容的提问来源于stack exchange,提问作者Ecubugg
相关产品推荐
相关产品推荐

