VBA设置Range报错:Application-defined or object-defined error求助
问题原因分析:未明确指定
Cells的父对象 这个「Application-defined or object-defined error」报错的核心问题,出在你创建范围时的对象不匹配上,咱们一步步拆解:
看你原代码里的这行关键语句:
Set rng = Workbooks(repfile).Worksheets("Families").Range("F2", Cells(o, 6))
你给Range的第一个参数"F2"指定了完整的父对象(也就是Workbooks(repfile)里的Families工作表),但第二个参数Cells(o, 6)却没有绑定到同一个工作表。在VBA里,如果不明确写清楚父对象,Cells会默认指向当前正在活动的工作表。
举个实际场景:假设你运行这段代码时,当前活动的工作表不是Families,那Cells(o,6)就会去活动表里找第o行第6列的单元格——这时候Range的两个端点分别来自两个不同的工作表,VBA根本没法创建一个跨工作表的连续范围,自然就抛出错误了。
你提到修改Set rng语句后问题解决,大概率是你补全了Cells的父对象,比如改成了这样:
Set rng = Workbooks(repfile).Worksheets("Families").Range("F2", Workbooks(repfile).Worksheets("Families").Cells(o, 6))
或者更简洁的写法是用With块统一指定父对象,避免重复输入,同时彻底杜绝这类对象不匹配的问题:
With Workbooks(repfile).Worksheets("Families") o = .Range("B:B").SpecialCells(xlCellTypeConstants).Count Set rng = .Range("F2", .Cells(o, 6)) End With
(注意这里所有的Range和Cells前面都加了.,表示它们都属于With块里指定的工作表)
最后提个小建议:使用SpecialCells(xlCellTypeConstants)时,如果目标列(这里是B列)没有任何常量单元格,代码会直接报错,最好给这段加个错误处理逻辑哦。
内容的提问来源于stack exchange,提问作者Wiktor Orczykowski
相关产品推荐
相关产品推荐

