Excel VBA提取各工作表固定位置单元格值存入结果表问题求解
问题修正方案
核心错误原因
- 字符串拼接逻辑错误:VBA不会自动解析字符串内部的变量名,你写的
"= querie & "!" & "M1""存在引号嵌套错误、变量未正确引出的问题,属于语法错误 - 公式属性错用:
FormulaR1C1是用来赋值R1C1格式的公式,你要写入A1格式的公式需要用Formula属性 - 冗余的Select操作:频繁切换工作表、选中单元格会拖慢运行速度,还容易引发意料外的错误,直接操作单元格对象即可
正确实现方式
方案1:直接写入固定值(更推荐,运行速度快)
不需要保留公式关联的话,直接读取指定工作表的单元格值写入结果表即可,完全不需要用到公式格式:
'###loops k, j, i ActiveSheet.Name = querie 'querie =k & j & i basically ' 直接赋值,不需要选中任何工作表/单元格 Sheets("Results").Range("A" & j - 1 & i).Value = Sheets(querie).Range("M1").Value Next i Next j Next k
方案2:写入关联公式(不用R1C1格式)
如果需要后续源表数据更新时结果自动同步,可以用Formula属性写入A1格式的公式,注意表名要用单引号包裹,避免表名含特殊字符时公式报错:
'###loops k, j, i ActiveSheet.Name = querie 'querie =k & j & i basically Sheets("Results").Range("A" & j - 1 & i).Formula = "='" & querie & "'!M1" Next i Next j Next k
注意事项
- 请确认
Range("A" & j - 1 & i)的拼接结果符合你预期的单元格位置,比如j=2、i=3时拼接结果为A13,如果你的需求是行号为(j-1)、列号和i关联,需要调整拼接逻辑 - 表名包含空格、横杠等特殊字符时必须加单引号包裹,因此方案2的公式写法是兼容性最好的通用写法
内容的提问来源于stack exchange,提问作者Matthieu Aoun
相关产品推荐
相关产品推荐

