gpt4 book ai didi

vba - Application.Cells VS Application.ActiveSheet.Cells

转载 作者:行者123 更新时间:2023-12-02 14:24:26 29 4
gpt4 key购买 nike

宏记录器生成以下语句:

Cells.Select

现在我明白,如果没有对象限定符,这会将所有单元格作为 Range 对象返回。

但是,我想知道这个语句的完全限定版本是什么?

是吗:

  1. Application.Cells.Select
  2. Application.ActiveSheet.Cells
  3. Application.ActiveWorkbook.ActiveSheet.Cells

换句话说,当 VBE 运行 Cells.Select 时,实际上会执行其中哪一个完全限定语句?

所有这些有什么区别???由于所有这些最终都访问同一个对象 - 如果我想显式限定所有对象,我会使用哪个语句,这是否只是个人偏好?

非常感谢!

最佳答案

这很复杂:)

As all of these access the same object in the end

确实。关键词“到底”。区别在于需要多少步才能到达那里...

不合格的单元格(或范围名称、等)并不神奇,它们是针对隐藏的全局范围对象的成员调用(Property Get),巧妙地命名为Global:

object browser: members of 'Global'

您可以通过在标准模块中爆炸来验证是否涉及此隐藏对象:

Sub GoesBoom()
'throws error 1004 "Method 'Range' of object '_Global' failed"
Debug.Print Range(Sheet2.Cells(1, 1), Sheet3.Cells(1, 1))
End Sub

_GlobalGlobal 密切相关 - 无需深入研究 COM,您可以考虑 Global 类,而 _Global 它的接口(interface)(虽然它并不完全像那样 - 查看“COM coClasses”以获取更多信息)。

但是CellsRange类的一个属性:

object browser: members of 'Range'

认为可以合理地假设Global调用几乎全部重定向到Application,它公开了Global的所有成员,然后是一些。

现在,正如您所指出的,Application 也有一个 Cells 属性 - 但 Cells 属于 Worksheet,因此,无论我们做什么,我们最终都需要一个 Worksheet 限定符...然后任何工作表都属于 Worksheets 集合,该集合属于 Workbook 对象 - 因此我们可以推断,不合格的 Cells 调用在完全显式的表示法中相当于...(鼓声):

Application.ActiveWorkbook.ActiveSheet.Cells

但是您不需要那么明确,因为 ActiveSheet 有一个 Parent ,它始终是 ActiveWorkbook,所以这也是明确的,但又不会太过分:

ActiveSheet.Cells

但这都是假设全局背景的。 This answer解释了有关它的一切 - 它的要点是,如果您位于工作表的代码隐藏中,那么不合格的 Cells 成员调用不是 Global.Cells,但是Me.Cells

<小时/>

现在,请注意 Cells 返回一个 Range。因此,每当您在不提供参数的情况下针对 Range 调用它时,您都会进行冗余成员调用:

ActiveSheet.Range("A1:B10").Cells ' parameterless Range.Cells is redundant

关于vba - Application.Cells VS Application.ActiveSheet.Cells,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51897030/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com