1

画像を一時的に配置して Sheet1 に非表示にしました。この方法を選択したのは、画像をドライブにローカルに保存したくないからです。

次に、現時点でシート 1 からアクティブ シートに画像を転送するボタンを備えたモードレス ユーザー フォームがあります。

これまでのところ、ワークブックを閉じる前に画像を非表示にする次のコードがあります。

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 (この場合、画像が保存されている場所) でのみ機能します。別のシートに切り替えてから、ユーザーフォームのボタンを押すと; 「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

追加情報: 短い (そして速い?) ".Cut" の代わりに "Select/Selection.Cut" を使用したのは、何らかの理由で Cut のみを使用すると画像が "A1" に配置されないためです。

4

2 に答える 2

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
于 2012-10-31T10:42:36.160 に答える
0

For Each tempWs In ThisWorkbook.Worksheets 構造を使用して、すべてのワークシートを反復処理しています。これはうまくいくはずです:

Dim TempSht as Worksheet
set tempSht = Thisworkbook.sheets(1)
tempsht.Pictures.Visible = True
tempsht.Pictures.Select
于 2012-10-31T10:41:11.770 に答える