要通過剪貼板標準方法將圖像從一張圖片移動到另一張圖片,請使用複製粘貼。對於粘貼方法,必須定義該圖像要被粘貼的範圍內,例如(可以跳過目的地參數):
Worksheets("Sheet1").Range("C1:C5").Copy
ActiveSheet.Paste Destination:=Worksheets("Sheet1").Range("D1:D5")
的圖象被插入在指定的區域中,但某些特性存在:
- 對於Office 2003粘貼圖像沒有完全綁定到左上角的 範圍的角落;如果你定義一個單獨的單元格,圖像可能會得到更多的左邊和下邊的位置,甚至可能得到相鄰的單元格;所以 你必須使用Top和Left屬性 (見下文)執行重新對齊過程;
對於Office 2003粘貼圖片IS NOR選擇,因此必須執行特殊程序 才能識別Shapes集合中的圖像; Office 2007的圖像被選擇,並綁定到的 指定範圍左上角,所以選擇屬性可以被用來將圖像 屬性更改在集合中(名稱例如)
;
在Shapes集合中粘貼的圖像索引變成最上面但是在 圖片集(Type = msoPicture);在Office 2003 Shapes中分組爲 ,因此首先是控件塊(Lstbox,Combobox, 等),圖像塊是後者,因此粘貼圖像索引實際上是 中的最後一個集合;對於Office 2007圖像塊,結果爲 應位於控件塊之前,因此您應該搜索IMAGE BLOCK (請參見下面的示例)元素之間最後粘貼圖像的 索引;
要取消選擇粘貼的圖像(不是偶然刪除它),您應該將焦點移動到任何單元格/例如Range(「A1」)。
因此,寫一個通用的程序,正常工作無論是在Office 2003或Office 2007的環境中,你應該:
- 第一,使用特殊的程序來找出粘貼的圖像(參考,或索引,它在Shapes集合中);秒,將圖像對齊到圖像被粘貼的範圍的左上角;
- 三,將焦點移到另一個單元格。
下面是定義Shapes集合在上粘貼的圖像索引功能:
Function GetIndexPastedPicture() As Integer
' Pasted picture has the upmost index among the PICTURE block
' But it is not necessarily the last inde[ in whole collection
' set reference to target sheet with pasted image
Set ThisDBSheet = Workbooks("BookName.xls").Worksheets("SheetName")
Dim sh As Shape, picIdx As Integer
picIdx = 0 ' initial value of index in Shapes collection, starts from 1
For Each sh In ThisDBSheet.Shapes
If sh.Type = msoPicture Then ' image found
picIdx = sh.ZOrderPosition ' image index
End If
Next
' after For loop, picIdx - is the last index in PICTURE block
GetIndexPastedPicture = picIdx
End Function
然後(假設剪貼板已經有適當的圖像)粘貼圖像的程序看起來像以下:
Sub InsPicFromClipbrd(sInsCell As String, sPicName As String)
' Image is pasted to cell with name sInsCell,
' it is aligned to upper-left corner of the cell,
' pasted image gets name sPicName in Shapes collection
' set reference to target sheet with pasted image
Set ThisDBSheet = Workbooks("BookName.xls").Worksheets("SheetName")
ThisDBSheet.Paste Destination:=Range(sInsCell) ' paste image fom clipboard
c1 = GetIndexPastedPicture() ' get index of pasted image (see above)
With ThisDBSheet.Shapes.Item(c1) ' correct the properties of the pasted image
.Top = Range(sInsCell).Top ' top alignment
.Left = Range(sInsCell).Left ' left alignment
.Name = sPicName ' assign new name
End With
Range("I18").Activate ' move focus from image
End Sub 'InsPicFromClipbrd