为什么在选择之前必须激活Excel工作表?

end*_*and 5 excel vba datamodel excel-vba

这段代码

Sheets(1).Activate
Sheets(2).Range("A1").Select
Run Code Online (Sandbox Code Playgroud)

将在VBA中失败,因为你只能Select在一个对象上使用它Active.我明白这是事实.

Excel数据模型的哪个元素会导致这种情况?我认为Activate在使用之前,用户/编码器有一个隐含的意图到任何对象Select- 我不明白为什么VBA不会做出这个假设,并且,我假设存在这种区别存在的原因.

  • Excel的数据模型的哪一部分会阻止选择而不激活?

Dan*_*iel 5

正如brettdj指出的那样,您无需激活工作表即可选择范围.这是一个参考,其中包含大量用于选择细胞/范围实例.

至于为什么我必须首先激活表格?我不认为这是数据模型的错误,而只是Ranges的select方法的限制.

从实验来看,在Excel中选择范围看起来有两个要求.

  1. Excel必须能够更新UI以指示所选内容.
  2. 父级范围(IE表格)必须处于活动状态.

要支持此声明,您也无法从隐藏的工作表中选择单元格.

Sheets(1).Visible = False
Sheets(1).Activate
'The next line fails because the Range cannot be selected.
Sheets(1).Range("A1").Select
Run Code Online (Sandbox Code Playgroud)

简而言之,当谈到Ranges时,你无法选择一个你看不到的.

我会声称这是一起选择的限制,除了你可以在隐藏的工作表中实际选择一个对象.愚蠢的Excel.