Переименование или работа с изображениями, скопированными с другого листа - PullRequest
0 голосов
/ 13 января 2020

У меня есть следующий код:

    Worksheets("Sheet2").Shapes("1").Copy
    ActiveSheet.Paste Range("A1")
    Worksheets("Sheet1").Shapes("1").IncrementLeft 100

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

Однако все скопированные изображения имеют одно и то же имя (его первоначальное имя «1»), и только первая вставленная картинка отвечает на команду наподобие «IncrementLeft». На самом деле, если я вручную удаляю первое скопированное изображение, второе начнет отвечать, поэтому не похоже, чтобы более поздние изображения имели другие имена.

Мне интересно, есть ли какие-либо Способы переименования или выбора изображения, когда я их вставляю, меня не волнует название фотографий после их вставки. Или есть другие решения?

Ответы [ 2 ]

1 голос
/ 13 января 2020

Если вы не заботитесь о названии картинок после их вставки, вы можете вообще игнорировать их использование. Предположим, что рисунки, вставленные на лист 1, являются единственными рисунками на листе в данный момент. Затем вы можете ссылаться на них без кавычек следующим образом:

    Worksheets("Sheet2").Shapes("1").Copy
    Worksheets("Sheet1").Paste Worksheets("Sheet1").Range("A1")
    Worksheets("Sheet1").Shapes(1).IncrementLeft 100
    Worksheets("Sheet1").Paste Worksheets("Sheet1").Range("A1")
    Worksheets("Sheet1").Shapes(2).IncrementLeft 200

Каждый раз, когда вы вставляете другое изображение, увеличивайте Shapes(x) на единицу, и вновь вставленная фигура будет нацелена, как вы теперь нацеливаетесь на них по номеру фигуры, а не по имени.

К вашему сведению, вы также можете изменить имя, если вам это нравится:

Worksheets("Sheet1").Shapes(2).Name = "3"

Также, как блестяще указал Хроноцид в комментариях, используя Shapes(Worksheets("Sheet1").Shapes.count) посчитает фигуры на этом листе, а затем обратится к последнему. Так что это всегда будет тот, который вы только что добавили. Это очень полезно, если у вас уже есть несколько фигур, или вы не можете (беспокоиться) вести счет.

0 голосов
/ 13 января 2020

Если вы немного копируете и вставляете, вы можете назначить объекты переменным, а затем обработать их имена. Проще управлять и найти их в будущем.

Sub CopyShape()
    Dim wkbk As Workbook
    Dim xShape As Shape
    Dim pasteSheet As Worksheet, copySheet As Worksheet
    Dim originalShape As String, newShape As String

    Set wkbk = ThisWorkbook
    originalShape = "1" 'set original shape name
    newShape = "2" 'set new shape name
    Set copySheet = wkbk.Worksheets("Sheet2") ' set sheet to copy from
    Set pasteSheet = wkbk.Worksheets("Sheet1") 'set sheet to paste in

    copySheet.Shapes(originalShape).Copy
    pasteSheet.Activate
    pasteSheet.Paste Range("A1")
    'cycle through each shape in new sheet and check name
    For Each x In pasteSheet.Shapes
        Set xShape = x
        If xShape.Name = originalShape Then Exit For
    Next x
    xShape.Name = newShape

    pasteSheet.Shapes(newShape).IncrementLeft 100
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...