如何通过点击Excel中的形状修改其右侧2单元格处形状的尺寸(无需引用目标形状名称)
实现点击形状修改指定位置形状的尺寸(无需引用形状名称)
我明白你的需求了——不用硬编码目标形状的名字,只靠位置关系找到它并修改尺寸对吧?咱们可以通过定位目标单元格+遍历形状匹配位置的方式来实现,下面是修改后的代码和详细说明:
修改后的完整代码
Sub ArrowClick() Dim clickedShape As Shape Dim targetCell As Range Dim targetShape As Shape ' 获取当前被点击的形状 Set clickedShape = ActiveSheet.Shapes(Application.Caller) ' 获取被点击形状左上角单元格右侧2列的目标单元格 Set targetCell = clickedShape.TopLeftCell.Offset(0, 2) ' 遍历工作表所有形状,找到以目标单元格为左上角的形状 For Each targetShape In ActiveSheet.Shapes ' 判断形状的左上角单元格是否与目标单元格完全匹配 If targetShape.TopLeftCell.Address = targetCell.Address Then ' 这里修改形状尺寸,示例:设置宽度为100,高度为50,可按需调整 targetShape.Width = 100 targetShape.Height = 50 Exit For ' 找到目标后退出循环,提升效率 End If Next targetShape ' 保留你原有的操作逻辑 With clickedShape.TopLeftCell .EntireRow.Borders(xlEdgeBottom).LineStyle = xlNone With .EntireRow.Offset(1, 0).Resize(9) .EntireRow.Hidden = Not .Hidden End With End With End Sub
关键逻辑说明
- 获取点击的形状:
Application.Caller会返回当前触发宏的形状名称,用ActiveSheet.Shapes(Application.Caller)就能精准定位到被点击的那个形状。 - 定位目标单元格:通过
clickedShape.TopLeftCell.Offset(0, 2),Offset(0,2)表示在原单元格基础上,行不变、列向右偏移2位,正好对应你要的“左上角单元格右侧2个单元格”位置。 - 匹配目标形状:遍历工作表所有形状,对比每个形状的
TopLeftCell地址和目标单元格地址,找到匹配的那个就是我们要修改的形状,完全不需要知道它的名字。 - 修改尺寸:找到目标形状后,直接修改
Width和Height属性即可,数值可以根据你的需求自由调整。
额外提示
如果担心有多个形状的左上角都在同一个单元格里(这种情况很少见),可以再增加判断条件,比如结合形状的类型(Type属性)或者其他特征来精准匹配,避免误修改。
内容的提问来源于stack exchange,提问作者Neod
相关产品推荐
相关产品推荐

