使用长字符串变量指定Range时触发VBA运行时错误1004
解决VBA创建图表时的运行时错误'1004'
错误原因
出现运行时错误'1004',是因为Range()方法接受的地址字符串存在长度限制。新增两个单元格后,你的myRange字符串长度超过了Excel允许的阈值,导致方法调用失败。
解决方法
方法1:直接用Union合并Range对象
放弃长字符串地址的方式,通过Union()方法逐个合并目标单元格对应的Range对象,代码示例:
Dim targetRange As Range Set targetRange = Union(Sheet1.Range("$A$1"), _ Sheet1.Range("$A$3"), _ Sheet1.Range("$A$8"), _ Sheet1.Range("$A$13"), _ Sheet1.Range("$A$18"), _ Sheet1.Range("$A$23"), _ Sheet1.Range("$A$28"), _ Sheet1.Range("$A$34"), _ Sheet1.Range("$A$41"), _ Sheet1.Range("$A$48"), _ Sheet1.Range("$A$55"), _ Sheet1.Range("$D$1"), _ Sheet1.Range("$D$3"), _ Sheet1.Range("$D$8"), _ Sheet1.Range("$D$13"), _ Sheet1.Range("$D$18"), _ Sheet1.Range("$D$23"), _ Sheet1.Range("$D$28"), _ Sheet1.Range("$D$34"), _ Sheet1.Range("$D$41"), _ Sheet1.Range("$D$48"), _ Sheet1.Range("$D$55")) ActiveSheet.Shapes.AddChart2(227, xlLine).Select ActiveChart.SetSourceData Source:=targetRange
方法2:通过循环优化代码(适合有规律的单元格)
观察目标单元格,A列和D列对应的行号一致,可将行号存入数组,通过循环自动合并区域,减少重复代码:
Dim rowNums As Variant Dim i As Integer Dim targetRange As Range rowNums = Array(1, 3, 8, 13, 18, 23, 28, 34, 41, 48, 55) ' 初始化第一个区域 Set targetRange = Sheet1.Range("A" & rowNums(0) & ",D" & rowNums(0)) ' 循环合并剩余区域 For i = 1 To UBound(rowNums) Set targetRange = Union(targetRange, Sheet1.Range("A" & rowNums(i)), Sheet1.Range("D" & rowNums(i))) Next i ActiveSheet.Shapes.AddChart2(227, xlLine).Select ActiveChart.SetSourceData Source:=targetRange
补充说明
Union()方法直接操作Range对象,不受地址字符串长度限制,能更稳定地处理大量非连续单元格的引用需求。
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

