将图片从 Excel 形状复制到 VBA 中的图像对象
Posted
技术标签:
【中文标题】将图片从 Excel 形状复制到 VBA 中的图像对象【英文标题】:Copy picture from Excel shape to Image object in VBA 【发布时间】:2017-07-28 07:18:48 【问题描述】:我想使用 VBA 将已插入 Excel 电子表格的图片复制到 Image 对象。这是我尝试过的代码:
Dim logo As Image
Set logo = New Image
logo.Picture = ThisWorkbook.Sheets("Sheet1").Pictures("Picture1")
最后一行因类型不匹配错误而失败。当我在监视窗口中查看 logo.Picture 时,它被列为图片类型;当我将一个对象变量分配给等号右侧的表达式时,它被列为图片/图片类型。我对 VBA 对象层次结构不够熟悉,不知道这些类型是否相关,也不知道如何从一种类型转换为另一种类型,尽管 Google 搜索了很多,但我还是找不到任何相关信息。
如果我用这个替换最后一行:
logo.Picture = LoadPicture(ThisWorkbook.Path & "\Logo.bmp")
文件加载,我的程序的其余部分工作。我在这里和其他地方搜索了很多帖子,除了建议将图像导出到文件然后使用LoadPicture
将其导入到 Image 对象之外,没有发现任何有用的东西。关于如何从工作表而不是文件中获取图片的任何建议?
如果重要,其余代码使用 logo.Picture.Handle 作为 GDI 位图 HANDLE,并将其传递给外部库以在外部设备上显示图像。如果有办法从不同的对象获取 GDI 位图 HANDLE,那也可以。
【问题讨论】:
你试过ThisWorkbook.Sheets("Sheet1").Shapes("Picture1")吗? (顺便说一句。通常对象默认命名为空格“图片 1”,另外,各种 Excel 语言版本中的名称可能不同)另外,我无法重新创建您的错误,因为似乎图像类型需要一些未在您的问题中披露的额外参考。 【参考方案1】:改为将其定义为Object
并使用Set
将您的图像分配给它:
Dim Logo As Object
Set Logo = ThisWorkbook.ActiveSheet.Pictures("Picture 1")
【讨论】:
【参考方案2】:您是否尝试将其作为OLEObject
插入?
Me.logo.Picture = ThisWorkbook.Worksheets("Sheet1").OLEObjects("Picture1").Object.Picture
您要复制的图像应作为图像(ActiveX 控件)插入到工作表中。
【讨论】:
【参考方案3】:Excel 对象模型中没有 Image 对象,但有一个 Picture 对象(未记录)。
Dim logo As Picture
Set logo = ThisWorkbook.Sheets("Sheet1").Pictures("Picture1")
【讨论】:
以上是关于将图片从 Excel 形状复制到 VBA 中的图像对象的主要内容,如果未能解决你的问题,请参考以下文章
如何将单元格区域作为表格从 Excel 复制到 PowerPoint - VBA
使用 VBA 将 Excel 中的图表嵌入到 Powerpoint 中的指定占位符中