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

Excel VBA跨工作表粘贴数据时报Subscript out of range错误

错误原因
  • 核心触发下标越界的问题:引用MKSHEET工作表时未给工作表名加双引号,代码中Worksheets(MKSHEET)的MKSHEET会被VBA识别为未定义的变量,默认值为空,程序无法在工作表集合中匹配到名称为空的工作表,直接抛出下标越界错误,正确的工作表引用格式应为Worksheets("MKSHEET")。
  • 粘贴逻辑错误:复制SYSTEMDATA表的内容后,代码写的是调用SYSTEMDATA表的Paste方法,目标却指向MKSHEET的单元格,跨表调用粘贴方法本身就存在逻辑冲突。
  • 行号计算逻辑冗余且易错位:每次循环都重复统计MKSHEET的最后一行,且粘贴完第一列数据后没有更新行号,会导致同一行来源的两列数据粘贴到MKSHEET的不同行,甚至覆盖已有内容。
  • 变量声明缺失:循环变量i未做显式声明,在开启强制变量校验的环境中会直接触发编译错误。
修正后完整代码
Private Sub CommandButton1_Click()
    Dim nmrow As Long, avrow As Long, i As Long
    
    ' 统计SYSTEMDATA表A列最后一个有内容的行号
    nmrow = Worksheets("SYSTEMDATA").Cells(Rows.Count, 1).End(xlUp).Row
    ' 提前统计MKSHEET表A列初始最后一个有内容的行号,无需循环内重复计算
    avrow = Worksheets("MKSHEET").Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 2 To nmrow
        avrow = avrow + 1
        ' 直接在Copy方法中指定粘贴目标,省去单独调用Paste的步骤
        Worksheets("SYSTEMDATA").Cells(i, 7).Copy Destination:=Worksheets("MKSHEET").Cells(avrow, 2)
        Worksheets("SYSTEMDATA").Cells(i, 13).Copy Destination:=Worksheets("MKSHEET").Cells(avrow, 3)
    Next i
    
    ' 清空剪贴板,释放内存
    Application.CutCopyMode = False
End Sub
优化说明
  • 所有工作表引用统一使用双引号包裹表名,避免变量未定义导致的下标越界问题
  • 直接给Copy方法传入Destination参数,减少剪贴板操作步骤,运行更稳定
  • 循环外提前计算MKSHEET初始行号,循环内只做行号递增,既减少重复计算量,也保证同源的两列数据粘贴到同一行,不会错位
  • 补全所有变量的显式声明,兼容所有VBA环境配置
  • 操作完成后清空剪贴板,避免残留内容影响后续操作

内容的提问来源于stack exchange,提问作者Intel Power

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:36:25