excel - 是个 。在 .Cells 定义时是否需要在 .Range 中?

标签 excel vba range

人们普遍认为这不是“最佳实践”。

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))

您将收到应用程序定义或对象定义错误

enter image description here

因此,始终建议正确限定对象,以便代码可以从任何地方运行

关于excel - 是个 。在 .Cells 定义时是否需要在 .Range 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36368220/

相关文章:

mysql - 关于创建 Web 数据库应用程序的建议

excel - 我可以在 VBA 中定义一个常量以在 Excel 工作表中使用吗?

Ruby:范围是空的,但用它切片会产生元素

vba - Excel VBA 工作表事件在隐藏/取消隐藏之间切换

excel - 将范围中的特定单元格分配给变量 VBA

excel - 如何在vba中将文本框动态定位在另一个下方

angular - *ngFor 用于组件中没有数据属性的数据范围

python - 如何创建一个类似范围的函数,其中参数由输入数据控制

c# - 创建 excel 文件时,如何使用 OpenXml 将文本换行添加到单元格?

excel - 使用VBA提取行地址的第一行号