2011-12-30 157 views
1

我想使用vba將剪貼板中的圖像粘貼到Excel單元格中。 我能找到這樣的代碼:將剪貼板中的圖像粘貼到Excel中的單元格中

If My.Computer.Clipboard.ContainsImage() Then 
Dim grabpicture = My.Computer.Clipboard.GetImage() 
PictureBox1.Image = grabpicture 
End If 

但這裏grabpicture變量是一個對象。如何從圖像對象更新單元格。 這樣,

Sheet1.Range("D11").Value = grabpicture 

回答

2

圖片沒有插入到單元格中。圖片被插入到表格中,然後可以對齊,以便左上角可視地匹配某個單元格的左上角。

要從剪貼板插入圖片,請使用Sheet1.Paste()

4

要通過剪貼板標準方法將圖像從一張圖片移動到另一張圖片,請使用複製粘貼。對於粘貼方法,必須定義該圖像要被粘貼的範圍內,例如(可以跳過目的地參數):

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 
相關問題