将图片从Excel形状复制到VBA中的图像对象

时间:2017-03-07 22:03:22

标签: excel-vba vba excel

我想使用VBA将已插入Excel电子表格中的图片复制到Image对象。这是我试过的代码:

Dim logo As Image
Set logo = New Image
logo.Picture = ThisWorkbook.Sheets("Sheet1").Pictures("Picture1")

最后一行因类型不匹配错误而失败。当我在观察窗口中查看logo.Picture时,它被列为类型图片;当我将一个Object变量赋给等号右边的表达式时,它被列为类型图片/图片。我对VBA对象层次结构不够熟悉,无法知道这些类型是否相关,也不知道如何从一个转换为另一个,并且尽管进行了艰苦的谷歌搜索,但仍无法找到任何相关内容。

如果我用这个替换最后一行:

logo.Picture = LoadPicture(ThisWorkbook.Path & "\Logo.bmp")

文件加载,我的程序的其余部分工作。我在这里和其他地方搜索了很多帖子,并没有找到任何有用的东西,除了将图像导出到文件然后使用LoadPicture将其导入Image对象的建议。有关如何从工作表而不是文件中获取图片的任何建议吗?

如果重要,其余代码使用logo.Picture.Handle作为GDI位图HANDLE,并将其传递到外部库以在外部设备上显示图像。如果有办法从不同的对象获取GDI位图HANDLE,那也可以。

3 个答案:

答案 0 :(得分:0)

您是否尝试过将其作为OLEObject插入?

Me.logo.Picture = ThisWorkbook.Worksheets("Sheet1").OLEObjects("Picture1").Object.Picture

要复制的图像应作为图像(ActiveX控件)插入工作表。

答案 1 :(得分:0)

Excel对象模型中没有Image对象,但是有Picture对象(未记录)。

SCNView

答案 2 :(得分:-1)

改为将其定义为Object,然后使用Set将图像分配给它:

Dim Logo As Object
Set Logo = ThisWorkbook.ActiveSheet.Pictures("Picture 1")