【问题标题】:How can I reference a shape by getting name of shape from a cell?如何通过从单元格中获取形状名称来引用形状?
【发布时间】:2019-01-20 09:10:34
【问题描述】:

我想遍历 Excel 中单元格列表中给出的特定名称的形状列表。为简化起见,这里是只引用一个形状的名称的问题:

形状的名称是“Star1”,在单元格 A1 中给出。

在 VBA 代码中,我可以直接通过ActiveSheet.Shapes("Star1").SelectActiveSheet.Shapes(1).Select 选择形状。但是,我想通过引用单元格 A1 中给出的名称来间接选择形状

ActiveSheet.Shapes(Indirect("A1")).Select

此代码不起作用,想知道如何修复它。

【问题讨论】:

  • 为什么不使用Range 对象? Dim rngShapeName as Range : Set rngShapeName = ActiveSheet.Range("A1") : ActiveSheet.Shapes(rngShapeName.Value).Select

标签: excel vba reference shapes


【解决方案1】:

您要查找的语法如下所示:-

Worksheets("Sheet1").Shapes(Worksheets("Sheet2").Cells(1, 1).Value).Select
or, if you prefer,
Worksheets("Sheet1").Shapes(Worksheets("Sheet2").Cells(1, "A").Value).Select
or
Worksheets("Sheet1").Shapes(Worksheets("Sheet2").Range("A1").Value).Select

在上述所有情况下,形状都在 Sheet1 上,其名称在 Sheet2 上。这两个项目可以在同一张表上,并且两者中的任何一个(或两者)都可以是 ActiveSheet 并相应地处理。

【讨论】:

  • 您能否描述一个场景,尤其是在这种情况下不能省略 '.Value' 或提供此问题的链接。
  • 范围是多个单元格。最小范围有一个单元格。范围有许多属性,例如它所在的行、列、颜色、字体等。它的属性之一是它的值,它可以是用户输入的值,也可以是单元格中公式的结果。 Value 属性是默认值。因此Range("A1").Value 在很多情况下都等价于Range("A1"),但并非全部。例如,复制单元格与复制其值是不同的。在需要时指定 Value 属性会使代码更清晰。
  • 我知道我总是在我的代码中指定 .Value 。对我来说,它只是让代码更容易阅读。我经常提到对象属性,并且喜欢设置我的代码供其他人阅读;始终指定被引用的属性,即使是默认值,也可以更清楚地传达代码的意图。
猜你喜欢
  • 2011-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-29
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 2017-10-04
相关资源
最近更新 更多