点击Automater工作表按钮在Visualizer工作表ActiveCell添加形状异常
问题原因
ActiveCell对象始终指向当前活动工作表的激活单元格——你点击「Automater」工作表中的按钮时,当前活动工作表是「Automater」,所以代码中ActiveCell.Left和ActiveCell.Top获取的是「Automater」工作表里单元格的坐标,最终导致形状虽然添加在「Visualizer」工作表,但位置对应到了「Automater」的单元格上。
修正方案
方案1:临时切换工作表获取目标位置
这种方式严格对应「Visualizer」工作表的ActiveCell,完成后可切回原工作表避免界面跳转影响:
Sub button0_Click() Dim visualizer As Worksheet Dim originalSheet As Worksheet Dim targetCell As Range ' 记录当前活动工作表 Set originalSheet = ActiveSheet Set visualizer = Sheets("Visualizer") ' 切换到Visualizer获取其激活单元格 visualizer.Activate Set targetCell = ActiveCell ' 在Visualizer添加形状,使用目标单元格坐标 visualizer.Shapes.AddShape msoShapeOval, targetCell.Left, targetCell.Top, 50, 50 ' 切回原工作表(可选,根据需求决定是否保留) originalSheet.Activate End Sub
方案2:不切换工作表直接获取选中单元格
如果目标是「Visualizer」中当前选中的单元格,无需切换工作表,直接引用选中区域即可(同时增加类型判断避免报错):
Sub button0_Click() Dim visualizer As Worksheet Dim targetCell As Range Set visualizer = Sheets("Visualizer") ' 确保Visualizer中选中的是单元格区域 If TypeName(visualizer.Selection) = "Range" Then ' 取选中区域的第一个单元格作为目标位置 Set targetCell = visualizer.Selection.Cells(1) visualizer.Shapes.AddShape msoShapeOval, targetCell.Left, targetCell.Top, 50, 50 End If End Sub
内容的提问来源于stack exchange,提问作者Hugo Almeida
相关产品推荐
相关产品推荐

