如何在Excel中获取Shape的内部名称

时间:2010-09-19 08:12:24

标签: excel excel-vba shapes vba

使用Shapes.AddPicture(...)方法将图片插入Excel工作表时,Excel会自动为其命名为“图片1”,“图片2”等。

此名称可用于在Shapes集合中获取对此形状对象的引用,如Shapes.Item(“Picture 1”)。如果使用名称框在Excel中更改名称,则可以通过两个不同的名称(或其中一个是键/标题)来引用Shape对象。因此,如果我将名称更改为“MyPic”,我可以使用其中任何一个来引用Shapes集合中的形状:

Shapes.Item("Picture 1")
OR
Shapes.Item("MyPic")

可以使用VBA中的Shape.Name属性访问该名称,但是如何访问内部似乎没有更改的其他值(MyPic)?

已更新
我想要做的是将单元格链接到Excel中的图片。我将图片数据保存在单元格的注释中。这些是场景:

  1. 如果我保留图片名称(外部名称),则在同一工作表上复制粘贴结构将复制名称,单元格将指向相同的结构。
  2. 如果我保留内部名称,则复制粘贴到其他工作表会产生问题,因为同一工作簿中的某些其他工作表上可能存在相同的内部名称。
  3. 如果我拿ID,我将无法从中获取图片参考
  4. 对我来说,获取内部名称很重要。我有Shape参考,但不知道如何从这个参考中获取内部名称。

1 个答案:

答案 0 :(得分:8)

将形状添加到工作表(oSht)后,您可以立即使用oSht.Shapes(Osht.Shapes.count)来引用它。 因此,oSht.Shapes(osht.shapes.count).Name会给你它的名字。

如果要在Shapes集合中找到形状的索引,并且您知道它的名称,那么您需要遍历Shapes.Name直到找到它。如果您知道索引,则可以构建“图片n”备用名称,或者可以存储“图片n”备用名称。您还可以存储形状的ID属性,然后通过循环遍历Shapes集合来引用形状,直到找到Shape.ID

如果用户将形状移动到另一个工作表然后重命名,则无法将其标识为原始形状,因为外部名称,备用名称,形状索引和ID都将不同。因此,如果这是您的方案中的问题,则需要考虑卷影复制或工作表保护。