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

当使用Shapes.AddPicture(…)方法将图片插入到Excel工作表中时,Excel将自动为其指定一个名称“图片1”,“图片2”等。

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

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

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

更新
我想要做的是将单元格链接到Excel中的图片。 我保持图片数据在单元格的评论。 这些是情景:

  1. 如果我保留图片名称(外部名称),则在同一工作表上复制粘贴结构将复制名称,单元格将指向相同的结构。
  2. 如果保留内部名称,则复制粘贴到其他工作表将会产生问题,因为同一个内部名称可能存在于同一工作簿中的某个其他工作表上。
  3. 如果我带ID,我将无法从中获取图片参考

对于我来说,获取内部名称很重要。 我有形状参考,但不知道如何从这个参考文件获取内部名称。

紧接在将形状添加到工作表(oSht)之后,可以使用oSht.Shapes(Osht.Shapes.count)来引用它。 所以, oSht.Shapes(osht.shapes.count).Name会给你它的名字。

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

如果用户将形状移动到不同的工作表并将其重命名,则无法将其识别为原始形状,因为外部名称,备用名称,形状索引和ID都将不同。 所以,如果在您的情况下这是一个问题,您将需要考虑阴影复制或工作表保护。