如何将图片从工作表传输(剪切和粘贴)到另一个工作表

时间:2012-10-31 10:25:26

标签: excel excel-vba excel-2007 vba

我将图片临时放置并隐藏在Sheet1中。我之所以选择这种方法,是因为我不希望将图片本地存储在我的驱动器上。

然后,我有一个无模式的UserForm,带有一个按钮,该按钮应该将图片从Sheet1传输到当前的ActiveSheet。

到目前为止,我有以下代码在关闭工作簿之前隐藏图片: ('On Error'在那里,因为取决于用户,图片不会总是在Sheet1中结束)

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim tempWs As Variant
    Call HidePic
End Sub

Private Sub HidePic()
    Dim tempWs As Variant
    On Error Resume Next
    For Each tempWs In ThisWorkbook.Worksheets
        tempWs.Pictures.Visible = False
    Next
End Sub

接下来,以下代码可以工作,但仅适用于Sheet1(在这种情况下,存储图片)。当我切换到另一张表,然后点击UserForm上的按钮;存储在“A1”中的数据被删除但没有放置/粘贴图片。

Private Sub Pic_Click()
    Dim tempWs As Variant
    On Error Resume Next
    For Each tempWs In ThisWorkbook.Worksheets
        tempWs.Pictures.Visible = True
        tempWs.Pictures.Select
    Next

    Selection.Cut
    ActiveSheet.Range("A1").Activate
    ActiveSheet.Paste
End Sub

附加信息:我使用“Select / Selection.Cut”而不是更短(和更快?)“。Cut”只是因为出于某种原因使用Cut只会将图片放在“A1”中

2 个答案:

答案 0 :(得分:2)

如果第一张图片上的图片名为Picture 1,您可以尝试使用

Private Sub Pic_Click()
Dim objPic As Shape
On Error Resume Next
Set objPic = Sheets(1).Shapes("Picture 1")
On Error GoTo 0
If objPic Is Nothing Then Exit Sub
objPic.Copy
ActiveSheet.Range("a1").PasteSpecial
objPic.Delete
End Sub

答案 1 :(得分:0)

您在ThisWorkbook.Worksheets构造中使用For Each tempWs迭代所有工作表。 这应该有效:

Dim TempSht as Worksheet
set tempSht = Thisworkbook.sheets(1)
tempsht.Pictures.Visible = True
tempsht.Pictures.Select