1

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

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

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

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

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

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

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

3 ответа3

0

Когда вы вставляете изображение, ему, вероятно, будет присвоено имя 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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .