Как получить внутреннее имя Shape в Excel - PullRequest
7 голосов
/ 19 сентября 2010

Когда изображение вставляется в лист Excel с помощью метода Shapes.AddPicture (...), Excel автоматически присваивает ему имя «Изображение 1», «Изображение 2» и т. Д.

Это имя можно использовать для получения ссылки на этот объект формы в коллекции Shapes, например Shapes.Item («Рисунок 1»). Если имя изменено в Excel с помощью поля имени, существует два разных имени (или одно из них является ключом / подписью), через которые можно ссылаться на объект Shape. Поэтому, если я изменю имя на «MyPic», я могу использовать любой из них для ссылки на фигуру в коллекции Shapes:

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

Доступ к имени можно получить с помощью свойства Shape.Name в VBA, но как мы можем получить доступ к другому значению (MyPic), которое, похоже, не изменяется внутри?

ОБНОВЛЕНО
То, что я пытаюсь сделать, это связать ячейку с изображением в Excel. Я сохраняю данные изображения в комментарии клетки. Вот сценарии:

  1. Если я сохраню имя изображения (внешнее имя), то при копировании структуры на том же листе будет дублироваться имя, и ячейка будет указывать на ту же структуру.
  2. Если я сохраню внутреннее имя, то вставка копии на другой лист создаст проблему, поскольку такое же внутреннее имя может существовать на каком-то другом листе в той же книге.
  3. Если я возьму удостоверение личности, я не смогу получить от него ссылку на изображение

Для меня важно получить внутреннее имя. У меня есть ссылка на форму, но я не знаю, как получить внутреннее имя из этой ссылки.

1 Ответ

8 голосов
/ 19 сентября 2010

Сразу после добавления фигуры на лист (oSht) вы можете использовать oSht.Shapes(Osht.Shapes.count) для ссылки на нее. Итак, oSht.Shapes(osht.shapes.count).Name даст вам свое имя.

Если вы хотите найти индекс фигуры в коллекции Shapes и знаете ее имя, вам нужно перебирать Shapes.Name, пока не найдете его. Если вы знаете Индекс, то вы можете создать альтернативное имя «Picture n» или сохранить альтернативное имя «Picture n». Вы также можете сохранить свойство ID фигуры, а затем ссылаться на фигуру, просматривая коллекции Shapes, пока не найдете Shape.ID

Если пользователь перемещает фигуру на другой лист и затем переименовывает ее, невозможно определить ее как исходную фигуру, поскольку внешнее имя, альтернативное имя, индекс фигур и идентификатор будут отличаться. Так что, если это проблема в вашем сценарии, вам нужно рассмотреть теневое копирование или защиту листа.

...