VBA实现关闭UserForm后自动跳转至刚写入值的工作表
VBA用户窗体关闭后自动跳转最后操作工作表实现方案
步骤1:声明窗体级变量存储最后操作的工作表
在UserForm1代码模块的最顶部(所有Sub过程之外)添加如下代码,用来记录用户最后点击操作的工作表:
' 模块级变量,整个窗体代码范围内都可以调用 Dim lastUsedSheetName As String
步骤2:修改S1/S2/S3三个按钮的点击事件
每次点击按钮写入单元格值时,同步记录当前操作的工作表名称:
Private Sub S1_Click() Sheets(1).Cells(1, 1).Value = TextBox1.Value ' 记录本次操作的工作表名 lastUsedSheetName = Sheets(1).Name End Sub Private Sub S2_Click() Sheets(2).Cells(1, 1).Value = TextBox1.Value lastUsedSheetName = Sheets(2).Name End Sub Private Sub S3_Click() Sheets(3).Cells(1, 1).Value = TextBox1.Value lastUsedSheetName = Sheets(3).Name End Sub
注意:如果你的按钮实际绑定的过程名是原有参考代码的
Sheet1_Click/Sheet2_Click/Sheet3_Click,只需要在原有过程内新增变量赋值的代码行即可,不需要修改过程名。
步骤3:修改关闭按钮的点击事件
关闭窗体时读取存储的工作表名,激活对应工作表即可:
Private Sub Zamknij_Click() UserForm1.Hide ' 加非空判断,避免用户未点击任何按钮直接关闭窗体时报错 If lastUsedSheetName <> "" Then Worksheets(lastUsedSheetName).Activate End If End Sub
可选优化
如果你的工作表名称后续可能会修改,也可以把变量改为存储工作表索引,避免表名修改后代码失效:
- 变量声明改为:
Dim lastUsedSheetIndex As Integer - 按钮事件赋值改为:
lastUsedSheetIndex = 1(S1对应1、S2对应2、S3对应3) - 关闭按钮激活改为:
Worksheets(lastUsedSheetIndex).Activate
内容的提问来源于stack exchange,提问作者Homar
相关产品推荐
相关产品推荐

