You need to enable JavaScript to run this app. VBA使用Union函数合并范围时触发Run-time error '1004'问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

VBA使用Union函数合并范围时触发Run-time error '1004'问题咨询

错误触发原因
  • 核心问题是跨工作表的命名范围无法直接映射为VBA的Range对象:Range对象的作用域被严格限定为单张工作表,仅能指向同工作表内的单元格区域。你的invoice_totals是引用了多工作表单元格的工作簿级命名范围,不符合Range对象的取值要求,因此Range("invoice_totals")调用直接抛出1004错误。
  • 附加问题:你后续用到的Union方法同样仅支持合并同一张工作表内的Range对象,即使你解决了第一个问题,跨表区域合并时也会触发新的错误。
修正后的实现代码

你需要直接操作工作簿的Names集合来修改命名范围的引用公式,无需通过Range对象中转:

Sub addsheettorange()
    Dim targetName As Name
    Dim newRef As String
    
    ' 获取工作簿级全局命名范围对象
    Set targetName = ThisWorkbook.Names("invoice_totals")
    ' 拼接原有引用 + 当前活动表E1的绝对引用,逗号分隔多表区域
    newRef = targetName.RefersTo & "," & ActiveSheet.Range("E1").Address(True, True, xlA1, True)
    ' 更新命名范围的引用
    targetName.RefersTo = newRef
End Sub
代码说明
  • 直接通过ThisWorkbook.Names集合获取跨表命名范围对象,绕过Range对象的单表限制
  • 用Address方法的第四参数External:=True生成带工作表名的绝对引用,保证拼接后的引用格式符合跨表命名范围的规则
  • 无需调用Union方法,直接通过拼接引用字符串的方式实现跨表区域的追加

内容的提问来源于stack exchange,提问作者Steve Kammerer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 05:48:04