如何从工作表的Shape对象中卸载已加载的图片?
如何从Excel Shape对象中卸载图片?
你通过以下VBA代码在工作表中添加并加载图片到Shape对象:
Sub Test() Dim shp As Shape Set shp = ActiveSheet.Shapes.AddPicture("Sample.jpg", msoFalse, msoTrue, 100, 100, 100, 100) shp.Name = "MyPhoto" End Sub
尝试用shp.Picture = Nothing或shp.Picture = LoadPicture("")卸载图片但无效,以下是两种可行解决方案:
方案1:保留Shape对象,仅清空图片内容
对于msoPicture类型的Shape,需结合图片属性清空与填充设置,确保彻底移除图片显示:
Sub Unload_Picture() Dim shp As Shape Set shp = ActiveWorkbook.Sheets(1).Shapes("MyPhoto") ' 验证目标Shape为图片类型 If shp.Type = msoPicture Then ' 清空图片内容 shp.Picture = LoadPicture("") ' 隐藏填充层,避免残留视觉痕迹 shp.Fill.Visible = msoFalse End If End Sub
方案2:直接删除整个Shape对象
若无需保留Shape容器,直接删除即可:
Sub Delete_Shape() Dim shp As Shape On Error Resume Next ' 处理Shape不存在的异常 Set shp = ActiveWorkbook.Sheets(1).Shapes("MyPhoto") If Not shp Is Nothing Then shp.Delete On Error GoTo 0 End Sub
为什么之前的代码无效?
shp.Picture = Nothing不符合VBA语法要求:Picture属性需接收图片对象,不能直接赋值Nothing;- 单独使用
shp.Picture = LoadPicture("")时,部分Excel版本中Shape的填充层可能仍保留原有样式,导致视觉上未完全清空。
内容的提问来源于stack exchange,提问作者YasserKhalil
相关产品推荐
相关产品推荐

