如何将图片(graphics对象)复制到VBA中的剪贴板?

在Excel 2003中,我需要将一个Graphics对象( sheet.PageSetup.LeftFooterPicture )复制到剪贴板。

我怎样才能做到这一点?

在2007年以前的Excel版本中,无法从页脚中提取graphics。 你将需要有原始的图像文件。

看到这个前面的问题了解更多细

根据MSDN , Graphic通过文件(文件名)加载图像。 Filename应包含Filename的完整path,例如“C:\ myimage.jpg”,但一旦工作表被保存,它将文件名改为“myiamge”,而不包含path和扩展名。 我无法在Excel中find其他任何对该文件的引用。

以下代码可能对您有所帮助。

 Sub yourMethod() copyGraphic Me.PageSetup.LeftFooterPicture End Sub Sub copyGraphic(srcGraphic As Graphic) Dim imagefolder As String Dim imageExtension As String Dim imagePath As String imagefolder = "D:\" '" imageExtension = ".gif" If InStr(1, srcGraphic.filename, ".") Then imagePath = srcGraphic.filename Else imagePath = imagefolder & srcGraphic.filename & imageExtension End If Me.Shapes.AddPicture imagePath, False, True, 10, 10, Round(srcGraphic.Width, 0), Round(srcGraphic.Height, 0) End Sub 

你可能想改变Me. 到您的工作表的名称和目标工作表。

正如之前提到的问题是,我不能从graphics对象(LeftFooterPicture)中提取图片看着我的答案,这个问题混淆了。

文件名应包含文件的完整path,例如“C:\ myimage.jpg”,但一旦工作表被保存,它将文件名改为“myiamge”,而不包含path和扩展名。

所以这里是我的解决方法:

  1. 在“保存”事件之前,我扫描所有的工作表,并获得他们的graphics到“文件名”有正确的内容(绝对path像C:\ mypic.jpg)
  2. 我创build一个隐藏的工作表,并添加所有图片作为形状对象(Shapes.AddPicture与图片的path)

  3. 我将当前的工作照片名称和照片位置与形状名称绑定

  4. 当我需要将图片复制到cliapboard时,我会查看隐藏页面中的图片(shape.CopyPicture xlScreen,xlPicture)

 Private Sub Command1_Click() Clipboard.Clear Clipboard.SetData Picture1.Picture, vbCFBitmap Command1.Enabled = False End Sub 

像这样,你可以复制图片到剪贴板。

当我尝试复制似乎不想复制的东西时,我从键盘上执行“打印屏幕”,然后将其粘贴到PAINT附件中。 从那里,你可以裁剪任何你不想要的东西,然后剪切和粘贴新的图像到一个新的PAINT文件,所以它是干净的。 您可以将其保存为.jpg以便于使用。

希望有所帮助。