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

161 篇文章 16 订阅
16 篇文章 0 订阅

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

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

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

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值