【发布时间】:2016-07-21 23:05:30
【问题描述】:
人们普遍认为这不是“最佳实践”。
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 object 范围的两个Range.Cells 属性将默认为ActiveSheet property。如果这不是 Sheet1(定义为 With ... End With statement 中的 .Parent),则分配将失败,
Run-tim error '1004': Application-defined or object-defined error
解决方案:使用.Cells 而不是Cells。结案。
但是……
当Range.Cells 属性都继承.Parent 工作表属性(在With ... End With statement 中定义)时,此Range object 定义中是否需要.?
这怎么可能,
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 而没有 .。但是,当定义范围对象的范围正确引用了它的父工作表时,为什么我们需要引用它的父对象呢?
【问题讨论】: