Excel VBA求助:跨工作表引用单元格值更新单元格时语法报错
问题原因与修复方案
你犯了一个典型的混淆——把VBA对象模型的语法直接当成了Excel单元格公式的语法来用!Worksheets("1ºperíodo").Range("V14:V43").Value是VBA里访问单元格值的代码,但Excel单元格公式根本不认识这种写法,这就是语法错误的根源。
Excel公式里引用其他工作表的单元格,正确格式是='工作表名'!单元格地址,因为你的工作表名包含特殊字符(º),必须用单引号把表名括起来才能被Excel正确识别。
针对你「G14对应V14、G43对应V43」的需求,这里有两种高效的修复代码:
方法一:利用自动填充(直观易懂)
先给第一个单元格设置正确的相对引用公式,再批量填充到整个区域:
' 给G14设置对应V14的公式 ActiveSheet.Range("G14").Formula = "='1ºperíodo'!V14" ' 向下填充到G43,Excel会自动把公式里的V14变成V15、V16...V43 ActiveSheet.Range("G14:G43").FillDown
方法二:用FormulaR1C1一次性写入(更高效)
FormulaR1C1是VBA里批量设置相对引用公式的利器,不用填充就能直接给整个区域设置对应行的引用:
' RC[15]表示「当前行,比当前列(G列)靠右15列的单元格」 ' G是第7列,V是第22列,22-7=15,刚好对应V列的同位置行 ActiveSheet.Range("G14:G43").FormulaR1C1 = "='1ºperíodo'!RC[15]"
额外提醒
如果后续需要固定引用某一行/列(比如不管G列哪一行都引用V14),只需要给单元格地址加上美元符号做绝对引用:
' 固定引用V14,所有G14:G43的单元格都会指向同一个值 ActiveSheet.Range("G14:G43").Formula = "='1ºperíodo'!$V$14"
内容的提问来源于stack exchange,提问作者Pedro R.
相关产品推荐
相关产品推荐

