人们普遍认为这不是“最佳实践”。
dim rng as range
with thisworkbook '<~~ possibly set an external workbook
with .worksheets("sheet1")
set rng = .range(cells(2, 1), cells(rows.count, 1).end(xlup))
end with
end with
两个Range.Cells定义 Range object 范围的属性默认为 ActiveSheet property 。如果这不是 Sheet1(定义为 .Parent 中的 With ... End With statement ),则分配将失败,
Run-tim error '1004': Application-defined or object-defined error
解决方案:使用.Cells
而不是Cells
。案件已结。
但是...
此 Range object 中是否需要 .
定义当 Range.Cells属性继承 .Parent With ... End With statement 中定义的工作表属性?
这怎么可以
dim rng as range
with thisworkbook '<~~ possibly set an external workbook
with .worksheets("sheet1")
' define rng as Sheet1!A2 to the last populated cell in Sheet1!A:A
set rng = .range(.cells(2, 1), .cells(rows.count, 1).end(xlup)) '<~~ .range
end with
end with
debug.print rng.address(0, 0, external:=true)
...与此不同,
dim rng as range
with thisworkbook '<~~ possibly set an external workbook
with .worksheets("sheet1")
' define rng as Sheet1!A2 to the last populated cell in Sheet1!A:A
set rng = range(.cells(2, 1), .cells(rows.count, 1).end(xlup)) '<~~ range not .range
end with
end with
debug.print rng.address(0, 0, external:=true)
当定义范围范围的参数不明确时,我们使用.range
;例如.range([A1])
A1
单元格可以来自任何工作表,默认为 ActiveSheet property没有 .
。但是,当定义范围对象的范围已正确引用其父工作表时,为什么我们需要引用范围对象的父对象呢?
最佳答案
我的观点略有不同。
是这是必需的。您无法始终控制用户可以从何处运行代码。
请考虑这几个测试用例
场景
工作簿有 2 个工作表。 Sheet1 和 Sheet2
<小时/>测试 1(从模块运行)
两个代码给出相同的结果
测试 2(从 Sheet1 的工作表代码区域运行)
两个代码给出相同的结果
测试 3(从 Sheet2 的工作表代码区域运行)
'~~> This code fails
set rng = range(.cells(2, 1), .cells(rows.count, 1).end(xlup))
您将收到应用程序定义或对象定义
错误
因此,始终建议正确限定对象,以便代码可以从任何地方运行
关于excel - 是个 。在 .Cells 定义时是否需要在 .Range 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36368220/