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

VBA Range引用超64个非连续单元格触发错误1004问题咨询

问题描述

从其他工作簿向当前工作簿复制多个非相邻单元格时,经实测最多仅能成功操作64个单元格;只要新增1个待复制单元格,就会触发Error 1004: Method 'Range' of object '_Worksheet' failed(_Worksheet对象的Range方法调用失败)。

复现场景
  • 实际业务代码中,自定义data_range函数返回的逗号分隔单元格地址共包含67个单元格,运行始终触发上述错误,对应代码如下:
For Each cel In wsTarget.Range(data_range(wsSource.Range("rng_tbl_cell_ref_ttl_rows"), wsSource.Range("rng_tbl_cell_ref_st_row"), wsSource.Range("rng_CV_Col_No_A1"), wsSource.Range("rng_cell_ref_sheet")))
  • 手动传入仅包含64个单元格的地址字符串调用Range方法时,代码可正常运行,测试代码如下:
For Each cel In wsTarget.Range("D10,D11,H25,L25,Q25,H26,L26,Q26,H24,L24,Q24,G27,H27,L27,Q27,G28,H28,L28,Q28,E31,N31,Q31,C36,G36,H40,H41,H42,H43,H44,H45,H46,Q40,Q41,Q42,H51,H52,H53,Q51,Q52,Q53,N54,Q54,Q55,Q56,H57,H58,B62,B63,B64,B65,B66,B67,B68,L62,L63,L64,L65,L66,L67,L68,Q62,Q63,Q64,Q65")
  • 只要在上述地址字符串中新增Q66或任意其他单元格,就会再次触发1004错误。后续业务场景需要引用超过67个单元格,需明确错误产生原因及可行解决方案。
关联自定义函数代码

问题涉及的data_range自定义函数代码如下:

Function data_range(row_count As Integer, offset_row As Integer, col As Integer, w_sheet_name As String) As String
    Dim i As Integer
    Dim data_range_string As String
    data_range_string = ""
    If row_count > 1 Then
        data_range_string = ThisWorkbook.Worksheets(w_sheet_name).Cells(offset_row, col)
        For i = 1 To row_count - 1
            data_range_string = data_range_string & "," & ThisWorkbook.Worksheets(w_sheet_name).Cells(offset_row + i, col)
        Next i
    ElseIf row_count = 1 Then
        data_range_string = ThisWorkbook.Worksheets(w_sheet_name).Cells(1 + offset_row, col)
    End If
    
    data_range = data_range_string
End Function
错误原因

该问题是Excel VBA的固有设计限制:通过逗号分隔的地址字符串调用Range方法时,字符串中包含的非连续区域数量不能超过64个,超出阈值就会触发1004错误,和单元格内容、工作表权限、文件损坏等外部因素无关。

可行解决方案

放弃拼接长地址字符串传参的实现方式,改用Union方法逐块合并单元格区域,该方法无64个区域的数量限制,实现逻辑如下:

  • 初始化目标Range对象为空
  • 遍历所有需要引用的单元格/连续单元格块,逐次通过Union方法将新区域合并到目标Range对象中
  • 全部区域合并完成后,直接遍历该合并后的Range对象,即可执行后续复制、取值等操作

针对现有代码的优化方向:可将data_range函数的返回值类型从String改为Range,在函数内部直接通过Union拼接需要的单元格区域,从根源上避开字符串传参的数量限制。


内容的提问来源于stack exchange,提问作者taezar.tw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 19:03:31