Именование объекта в Excel VBA, чтобы его можно было выбрать после копирования на другой лист или книгу

Я любительски собираю макро / VBA в Excel. Она включает в себя копирование изображения легенды на другом языке из источника.xlsx и вставка его в пункт назначения.xlsx. Изображение просто, это больше не объект на диаграмме.

код ниже работает. Однако теперь я пытаюсь выровнять новое изображение, чтобы оно заменило старую xlamLegendGroup в назначении.xlsx. В настоящее время я просто вставляю его в ячейку, которая близка ("AO6") и вручную перемещается она.

моя проблема в том, что я не могу выбрать изображение, как только оно находится в пункте назначения.xlsx. Если бы я мог, я уверен, что смогу понять, как включить эти значения X и Y в мой VBA..

Я попытался назвать его с помощью диспетчера имен, но мой код не распознает его. Я даже пытался назвать его в VBA во время выбора, но я просто получаю ошибки и неправильные методы и т. д. (Как я уже сказал, любительский уровень понимания VBA)

Если кто-нибудь из вас может помочь мне решить эту проблему Называя, а затем повторно выбрав вопрос, было бы очень признателен.

копирует изображение из книги soure. Это единственное изображение на листе, поэтому я могу выбрать его таким образом

Workbooks("MyWkbSource.xlsx").Sheets("LEGEND_AVG").Activate
ActiveSheet.DrawingObjects.Select
Selection.Copy

активировать целевую книгу и вставить изображение. Здесь я хотел бы выровнять его (центрируя его сверху) с изображением, которое я собираюсь удалить.

Workbooks(MyWkbDestination.xlsx").Sheets("AVG").Activate
ActiveSheet.Range("AO6").Select
ActiveSheet.Paste

Я выбираю существующее старое изображение и удаляю его

ActiveSheet.Shapes.Range(Array("xlamLegendGroup")).Select
Selection.Delete
1
задан RocketGoal
27.01.2023 23:50 Количество просмотров материала 3171
Распечатать страницу

3 ответа

когда вы вставляете изображение, ему, скорее всего, будет дано имя Picture #, где # увеличивает на 1, если элемент уже существует.

как таковой, первое изображение вставить должен называться Picture 1. Вы можете узнать название изображений в вашем документе с помощью:

For Each Shape In ActiveSheet.DrawingObjects
    MsgBox Shape.Name
Next

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

поскольку вы просто вставляете объект, не так-то просто манипулировать им в одном и том же развертке. Вы можете использовать цикл выше, чтобы найти последний Picture #, и тогда вы бы знали, что следующий вставленный будет #+1 и может изменить имя по мере необходимости, используя ActiveSheet.Shapes.Range(Array("Picture #+1")).Name.

вы также можете использовать .Top и .Left для перемещения изображения по мере необходимости, а также .Height и .Width если вам нужно изменить ее размер.

0
отвечен Jonno 2023-01-29 07:38

всякий раз, когда вы копируете один объект (скажем, формы) С одного листа на другой или из одной книги в другую, вы можете обратиться к объекту назначения, исследуя его место в .Граф. Например:

Sub CopyShape()
    Dim sh1 As Worksheet, sh2 As Worksheet
    Dim shp1 As Shape, shp2 As Shape
    Set sh1 = Sheets("Sheet1")
    Set sh2 = Sheets("Sheet2")
    Set shp1 = sh1.Shapes(1)

    shp1.Copy
    sh2.Paste

    Set shp2 = sh2.Shapes(sh2.Shapes.Count)
    shp2.Name = "Most recent Shape on Sheet2"
End Sub

после завершения копирования последняя фигура, помещенная в место назначения, появится последней в списке фигур в этом месте назначения.

0
отвечен Gary's Student 2023-01-29 09:55

просто назовите фигуру с настроенным именем. Избегайте цифр после имени.

Ex: прямоугольник 1 измените его на> MyRectangle

0
отвечен Noel Gallardo 2023-01-29 12:12

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх