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

标签 excel 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,我将无法从中获取图片引用

对我来说,获取内部名称很重要。我有 Shape 引用,但不知道如何从此引用中获取内部名称。

最佳答案

将形状添加到工作表 (oSht) 后,您可以立即使用 oSht.Shapes(Osht.Shapes.count) 来引用它。 因此,oSht.Shapes(osht.shapes.count).Name 将为您提供其名称。

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

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

关于excel - 如何在Excel中获取Shape的内部名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3744986/

相关文章:

excel - 如何在 excel VBA 用户窗体中显示 dwg 文件的缩略图

Excel - 数组上的索引匹配未返回正确答案

vba - 单击单元格以重定向到其他工作表

Android - 只有最后一项显示在图层列表中

VBA将一组单元格作为范围传递给函数

Excel 宏应用条件格式

访问共享点中的 excel 文件时 VBA 找不到文件

Excel VBA 检查是否设置了命名范围

c++ - 为在 OpenGL 中使用基本物理和渲染寻找一个好的形状类设计

Javafx:如何使用源文件的驱动程序文件来显示创建的形状