首页 > 解决方案 > 重命名或处理从其他工作表复制的图片

问题描述

我有以下代码:

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

代码将名为“1”的图像从 sheet2 复制并粘贴到 sheet1,然后移动它。问题是,我想多次复制同一张图像并对它们做不同的事情(例如,一个向右移动而另一个向下移动)。

但是,所有复制的图片共享相同的名称(其原始名称“1”),并且只有粘贴的第一张图片响应“IncrementLeft”等命令。事实上,如果我手动删除复制的第一张图片,第二张就会开始响应,所以感觉后面的图片名称不同。

我想知道粘贴时是否有任何方法可以重命名或选择图片,粘贴后我不在乎图片的名称。或者还有其他解决方案吗?

标签: excelvba

解决方案


如果您在粘贴后不关心图片的名称,则可以完全忽略使用名称。让我们假设粘贴到工作表 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"

同样正如 Chronocidal 在评论中出色地指出的那样,使用Shapes(Worksheets("Sheet1").Shapes.count)将计算该工作表上的形状,然后参考最后一个。所以它永远是你刚刚添加的那个。如果您已经有多个形状,或者不能(被打扰)保持计数,这将非常有用。


推荐阅读