如何使用VBA将所选图像移到前面

时间:2014-06-04 17:23:18

标签: excel excel-vba vba

场景:我在一个工作表中有大量图像,其中许多图像彼此重叠。

如何编写 VBA 代码,以便当用户点击该工作表中的任何图像时, Excel 会自动将该图像放到前面?

3 个答案:

答案 0 :(得分:4)

如果您想要将对象myObject带到前面,请使用

myObject.ShapeRange.Zorder msoBringToFront

http://msdn.microsoft.com/en-us/library/office/aa213680(v=office.11).aspx

您的对象可能是选择:

set myObject = Selection

至于响应点击 - 这更棘手。对于"选择图片"似乎不是一个事件。 。但 是一个解决方案......

您可以创建一个名为Picture_click()的宏,并将该宏指定给每张图片。似乎没有一种事件驱动的方式来实现这一目标,但以下工作:

将以下内容添加到模块中:

Sub picture_click()
  ActiveSheet.Shapes(Application.Caller).Select
  Selection.ShapeRange.ZOrder (msoBringToFront)
End Sub

Sub connect_all()
Dim sh As Shape
For Each sh In ActiveSheet.Shapes
  sh.OnAction = "picture_click"
Next sh
End Sub

您只需运行一次connect_all sub,即可将picture_click宏指定给每个形状。现在,当您点击图片(或其他形状)时,它会出现在前面。

注意 - Application.Caller会告诉您点击了哪个对象 - 换句话说,是什么导致了picture_click的调用。这是必要的,因为"点击"不会导致图片被选中 - 在宏运行后发生。所以你不能只使用这个选择。整蛊,那个。

我引用了this earlier post来提出这个解决方案 - 特别是RichJ的解决方案。

<强>事后

如果您不希望在点击图片后选择图片,则可以将picture_click()子修改为以下内容:

Sub picture_click()
  ActiveSheet.Shapes(Application.Caller).ZOrder msoBringToFront
End Sub

这会将图片移到前面但不会选中它。这种方法有待说明。

答案 1 :(得分:0)

对于每个形状,分配BringToFront宏,然后将以下内容放入模块

Sub BrintToFront

Selection.ShapeRange.ZOrder msoBringToFront

end sub

答案 2 :(得分:0)

将此宏指定给所有形状:

Sub lux()
    ActiveSheet.Shapes(Application.Caller).ZOrder msoBringToFront
End Sub