Excel VBA鼠标悬停预览图片:重置函数误删全部图片的解决需求
解决方案
要实现仅删除鼠标悬停预览的图片,而非所有工作表图片,我们可以通过保存当前预览图片的对象引用来精准控制删除目标,具体修改如下:
步骤1:修改模块级变量
将原有的DoOnce布尔变量替换为用于存储当前预览图片的对象变量:
Dim CurrentPreviewPic As Picture ' 存储当前显示的预览图片对象
步骤2:更新OnMouseOver函数
插入新图片前先清除旧的预览图,同时将新插入的图片赋值给CurrentPreviewPic:
Public Function OnMouseOver(URL As String, TheCell As Range) Reset ' 先清除之前的预览图 Set CurrentPreviewPic = ActiveSheet.Pictures.Insert(URL) With CurrentPreviewPic.ShapeRange .LockAspectRatio = msoTrue .Width = 300 .Height = 300 End With With CurrentPreviewPic .Left = TheCell.Left .Top = TheCell.Top .Placement = 1 .PrintObject = True End With End Function
步骤3:重写Reset函数
仅删除CurrentPreviewPic指向的预览图片,而非所有图片:
Public Function Reset() If Not CurrentPreviewPic Is Nothing Then CurrentPreviewPic.Delete Set CurrentPreviewPic = Nothing ' 释放对象引用 End If End Function
补充说明
- 这种方式通过对象引用精准定位到我们插入的预览图,不会误删工作表中其他手动添加的图片。
- 每次触发
OnMouseOver时会先调用Reset清除上一张预览图,避免多张预览图叠加显示。
内容的提问来源于stack exchange,提问作者Amir Shahzad
相关产品推荐
相关产品推荐

