VBA使用Range Union方法出现报错的原因咨询
VBA调用Union方法报错的底层原因
核心错误原因
Union是Application顶级对象的专属方法,VBA对象模型中Worksheet(工作表)、Workbook(工作簿)对象本身不存在Union方法,你的原始代码通过工作表对象ws调用Union,属于调用了不存在的对象成员,必然触发运行时错误。- 你之前印象中可以通过工作簿/工作表调用
Union,大概率是误写了ThisWorkbook.Application.Union这类代码:Workbook/Worksheet对象的Application属性会返回顶级Application对象,本质还是调用的Application的Union方法,并非工作簿/工作表自身持有该方法。
补充说明
- 你修改后的代码使用
Application.Union是正确的调用方式,额外加的Worksheets("Sheet1").Activate不是必须项:只要你定义rng00、rng01时显式绑定了对应工作表,不需要激活工作表也可以正常运行,示例代码如下:
Set ws = ThisWorkbook.Worksheets("Sheet1") ' 给Range显式指定所属工作表,避免依赖活动表的隐式规则 Set rng00 = ws.Range("A1:C3") Set rng01 = ws.Range("F1:G3") Application.Union(rng00, rng01).Copy
- 注意:
Union只能合并所属同一个工作表的Range对象,跨工作表的Range无法用Union合并。
内容的提问来源于stack exchange,提问作者xlmaster
相关产品推荐
相关产品推荐

