将剪贴板中的图像粘贴到Excel中的单元格中

我想使用vba将图像从剪贴板粘贴到excel单元格。 我可以find这样的代码:

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

但是这里的grabpicturevariables是一个对象。 如何从图像对象更新单元格。 喜欢这个,

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

图片没有插入到单元格中。 将图片插入到图纸上,然后alignment,使左上angular与某个单元格的左上angular相匹配。

要从剪贴板插入图片,请使用Sheet1.Paste()

要通过剪贴板将图像从一张图片移动到另一张图片,使用复制粘贴。 对于粘贴方法,您必须定义要粘贴图像的范围,例如(您可以跳过目标参数):

 Worksheets("Sheet1").Range("C1:C5").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet1").Range("D1:D5") 

在指定的区域插入图片,但存在一些特殊性:

  • 对于Office 2003粘贴的图像没有完全绑定到范围的左上angular; 如果你定义一个单独的单元格,图像可能会获得更多的位置,甚至可能得到相邻的单元格; 所以你必须使用Top和Left属性来执行重新alignment过程(见下面)。
  • 对于Office 2003粘贴图片IS NOR,所以必须执行特殊的程序来识别Shapes集合中的图片;

  • 对于Office 2007图像被选中并绑定到指定范围的左上angular,因此Selection属性可用于更改集合中的图像属性(例如Name);

  • 在Shapes集合中粘贴的图像索引成为最上层,但在图像集(Type = msoPicture)中; 在Office 2003 Shapes中,首先是控件块(Lstbox,Combobox等)和图像块是后者,所以粘贴的图像索引实际上是所有集合中的最后一个; 对于Office 2007图像块来说,在控件块之前,因此您应该searchIMAGE BLOCK元素之间最后粘贴的图像的索引(请参见下面的示例)。

  • 要取消select粘贴的图像(不是偶然删除它),您应该将焦点移动到任何单元格/例如Range(“A1”)。

因此,要编写一个在Office 2003或Office 2007环境中正常工作的通用程序,您应该:

  • 首先,使用特殊的程序来查找粘贴图像(Shapes集合中的引用或索引);
  • 其次,将图像alignment到图像被粘贴的范围的左上angular;
  • 第三,把焦点转移到另一个细胞。

下面是定义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