excel将形状从一个工作表复制到另一个工作表

excel将形状从一个工作表复制到另一个工作表,excel,vba,shapes,Excel,Vba,Shapes,我试图使用宏将所有形状(图像)从一个工作表复制到另一个工作表。我使用record宏来执行此操作,但它总是为形状提供一个间接的名称,因此当我们不知道形状的名称时,无法复制它。这将把所有形状从Sheet1复制到Sheet2: Sub CopyShape() Dim s As Shape For Each s In Sheets("Sheet1").Shapes s.Copy Sheets("Sheet2").Paste Next s End S

我试图使用宏将所有形状(图像)从一个工作表复制到另一个工作表。我使用record宏来执行此操作,但它总是为形状提供一个间接的名称,因此当我们不知道形状的名称时,无法复制它。

这将把所有形状从
Sheet1
复制到
Sheet2

Sub CopyShape()
    Dim s As Shape
    For Each s In Sheets("Sheet1").Shapes
        s.Copy
        Sheets("Sheet2").Paste
    Next s
End Sub
复制完成后,您可以随意定位或重命名它们。
(另一种方法是复制整个工作表。)

编辑#1:

此代码还将自动为复制的形状指定名称和位置:

Sub CopyShape()
    Dim shp1 As Shape, nombre As String
    Dim s1 As Worksheet, s2 As Worksheet
    Dim shp2 As Shape

    Set s1 = Sheets("Sheet1")
    Set s2 = Sheets("Sheet2")

    For Each shp1 In s1.Shapes
            nombre = shp1.Name
            shp1.Copy
            s2.Paste
            Set shp2 = s2.Shapes(s2.Shapes.Count)
            shp2.Name = nombre
            shp2.Top = shp1.Top
            shp2.Left = shp1.Left
    Next shp1
End Sub

如果重新复制,请小心避免名称冲突。

这将把所有形状从
Sheet1
复制到
Sheet2

Sub CopyShape()
    Dim s As Shape
    For Each s In Sheets("Sheet1").Shapes
        s.Copy
        Sheets("Sheet2").Paste
    Next s
End Sub
复制完成后,您可以随意定位或重命名它们。
(另一种方法是复制整个工作表。)

编辑#1:

此代码还将自动为复制的形状指定名称和位置:

Sub CopyShape()
    Dim shp1 As Shape, nombre As String
    Dim s1 As Worksheet, s2 As Worksheet
    Dim shp2 As Shape

    Set s1 = Sheets("Sheet1")
    Set s2 = Sheets("Sheet2")

    For Each shp1 In s1.Shapes
            nombre = shp1.Name
            shp1.Copy
            s2.Paste
            Set shp2 = s2.Shapes(s2.Shapes.Count)
            shp2.Name = nombre
            shp2.Top = shp1.Top
            shp2.Left = shp1.Left
    Next shp1
End Sub

如果重新复制,请小心避免名称冲突。

显示代码和实际问题这也可能有助于通读。显示代码和实际问题这也可能有助于通读。复制/粘贴工作正常非常感谢。但是这个答案把形状放在了左角,我想要的是把它们放在源代码中相同的位置worksheet@HugoSilva请参阅我的编辑#1Set shp2=s2。Shapes(s2.Shapes.Count)返回我的错误(需要对象)@HugoSilva我无法重现您看到的错误。@HugoSilva尝试从
Sheet2
上的无形状开始复制/粘贴工作正常,非常感谢。但是这个答案把形状放在了左角,我想要的是把它们放在源代码中相同的位置worksheet@HugoSilva请参阅我的编辑#1Set shp2=s2。Shapes(s2.Shapes.Count)返回我的错误(需要对象)@HugoSilva我无法重现您看到的错误。@HugoSilva请尝试在
Sheet2