图形对齐排列(控件的怪问题)

网友需求:选中工作表中的两个矩形后,执行代码实现两个矩形对齐排列,如下图所示。
在这里插入图片描述
这个代码并不复杂,对于以哪个图形为基准并无要求,代码如下。

Sub demo()
    Set s4 = Selection(1)
    Set s3 = Selection(2)
    Debug.Print s3.Top, s3.Left, s3.Height
    Debug.Print s4.Top, s4.Left, s4.Height
    s4.Left = s3.Left
    s4.Top = s3.Top + s3.Height
End Sub

【代码解析】
第2和3行代码将两个图形对象分别赋值给变量
第4和5行代码在立即窗口中输出图形对象的相关属性。
第6行代码调整图形对象左对齐对齐。
第7行代码调整图形对象上下叠放。

选中两个图形,在VBE中执行代码,效果杠杠的。为了方便使用,插入ActiveX按钮,并写入事件代码。
在这里插入图片描述

Private Sub CommandButton1_Click()
 Call demo
End Sub

选中两个图形,点击按钮,出现如下错误
在这里插入图片描述
在立即窗口中查看一下s3和s4的对象类型,发现都是Range对象,说明点击按钮执行代码时,Selection对象发生了变化,不再是Shape对象,而是变为活动单元格。

?typename(s3)
Range
?typename(s4)
Range

产生这个变化的原因,ActiveX控件也属于Shape对象,因此点击按钮时,相当于点击了另一个Shape对象,最初的选中两个图形的状态已经不存在,并且按钮的选中状态不会像图形一样持续,所以代码执行时Selection实际为活动工作中的选中单元格区域。

?Activesheet.shapes.count
3

想要解决这个问题也很简单,在工作表中使用窗体控件,就可以完美的实现点击按钮,图形重排的效果。

在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页