Excel VBA代码求助:含变量的单元格循环赋值失败
批量跨表数据填充代码修复
问题根源
你的代码核心问题是单元格地址的字符串拼接语法错误,VBA里不能直接把变量写在字符串引号里,必须用&把字符串和变量拼接起来。另外代码里的Select操作完全多余,反而会降低运行效率还容易出错。
修复后的完整代码
Sub NOVOS_GRAFICOS_FINAL() ' NOVOS_GRAFICOS Macro ' Keyboard Shortcut: Ctrl+j Dim m As Integer Dim NomeSheet As String, EE As String ' 明确声明变量类型,避免Variant隐式转换 NomeSheet = InputBox("Enter the name of the Sheet") ' 直接操作DATA工作表,无需选中 For m = 45 To 64 ' 正确拼接单元格地址字符串 Worksheets("DATA").Range("E" & m).Formula = "='" & NomeSheet & "'!$D$47" Worksheets("DATA").Range("I" & m).Formula = "='" & NomeSheet & "'!$D$48" Worksheets("DATA").Range("M" & m).Formula = "='" & NomeSheet & "'!$D$49" Worksheets("DATA").Range("Q" & m).Formula = "='" & NomeSheet & "'!$D$50" Next m End Sub
关键修改点
- 修正单元格地址拼接:把错误的
Range("E & m &")改成Range("E" & m),用&连接列名字符串和行号变量m - 移除冗余的
Select操作:直接通过Worksheets("DATA").Range(...)赋值,避免激活/选中工作表的操作 - 明确变量类型:把
Dim NomeSheet, EE As String改为Dim NomeSheet As String, EE As String,VBA中如果不明确声明,前面的变量会默认是Variant类型,可能引发潜在问题
额外优化建议
如果不需要公式引用,只是把值复制过去,可以把.Formula改成.Value,这样单元格里会直接显示数值,而不是公式,运行速度也更快:
Worksheets("DATA").Range("E" & m).Value = Worksheets(NomeSheet).Range("D47").Value Worksheets("DATA").Range("I" & m).Value = Worksheets(NomeSheet).Range("D48").Value Worksheets("DATA").Range("M" & m).Value = Worksheets(NomeSheet).Range("D49").Value Worksheets("DATA").Range("Q" & m).Value = Worksheets(NomeSheet).Range("D50").Value
内容的提问来源于stack exchange,提问作者Prsmj13 Machado
相关产品推荐
相关产品推荐

