2010-09-19 7 views
6

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

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

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

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

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

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

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

ответ

7

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

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

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

+0

+1: «Если вы знаете индекс, вы можете создать альтернативное имя« Picture n »- это может не всегда быть истинным, потому что если изображение из индекса 2 будет удалено из коллекции Shapes, у нас может быть« Изображение » 3 "в индексе 2. Я не думаю, что внутреннее имя будет изменено в соответствии с индексом. – A9S6

+0

Если я добавлю форму в VBA, возвращаемое значение из Shapes.AddPicture (...) даст мне ссылку на нее, поэтому здесь нет необходимости делать фигуры (граф). Кроме того, для вновь созданного объекта и внутренние, и отображаемые имена будут одинаковыми, так что в это время будет создано имя shape.Name. Проблема заключается в том, как получить это внутреннее имя с помощью ссылки Shape позже (пользователь мог изменить отображаемое имя) – A9S6

+0

Если у вас есть действительная ссылка на объект фигуры, тогда Shape.name даст вам свое внешнее имя. –

 Смежные вопросы

  • Нет связанных вопросов^_^