You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 10:58:24