如何获取触发Excel宏的按钮所在工作表并返回该表?
获取触发宏的按钮所在工作表的方法
分三种常见按钮类型给出实现方式:
一、表单控件按钮
表单控件绑定宏后,用Application.Caller拿到按钮对象,再获取其所属工作表:
Sub 你的宏名称() ' 这里放你的数据更新代码 ' 获取触发按钮所在工作表并切换回去 Dim btn As Object Dim targetSheet As Worksheet Set btn = Application.Caller Set targetSheet = btn.TopLeftCell.Worksheet targetSheet.Activate End Sub
Application.Caller返回触发宏的表单控件,通过TopLeftCell.Worksheet就能定位到按钮所在的工作表,最后用Activate切换回去。
二、ActiveX控件按钮
如果是ActiveX按钮,分两种场景:
- 宏写在按钮所在的工作表模块里(比如Sheet1的按钮点击事件):
Private Sub CommandButton1_Click() ' 这里放你的数据更新代码 ' 直接切换回按钮所在工作表 Me.Activate End Sub
- 宏写在通用模块里:
Sub 你的宏名称() ' 这里放你的数据更新代码 Dim ctrl As Object Dim targetSheet As Worksheet Set ctrl = CommandBars.ActionControl If Not ctrl Is Nothing Then Set targetSheet = ctrl.Parent targetSheet.Activate End If End Sub
三、形状按钮
形状按钮绑定宏的情况,同样用Application.Caller获取形状对象:
Sub 你的宏名称() ' 这里放你的数据更新代码 Dim shp As Shape Dim targetSheet As Worksheet Set shp = ActiveSheet.Shapes(Application.Caller) Set targetSheet = shp.Parent targetSheet.Activate End Sub
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

