Excel 自动执行全局宏 25.04.09
步骤 1:创建个人宏工作簿(Personal.xlsb)
-
生成Personal.xlsb
(如尚未存在):
- 打开Excel → 开发工具 → 录制宏 → 选择“保存到个人宏工作簿” → 停止录制。
- 按
Alt + F11
进入VBA编辑器,确认左侧出现PERSONAL.XLSB
。
步骤 2:在Personal.xlsb中设置全局事件监听
-
插入类模块:
-
右键点击
PERSONAL.XLSB
→ 插入 → 类模块 → 重命名为clsAppEvents
。 -
在类模块中输入以下代码:
Public WithEvents App As Application ' 声明应用程序级事件 ' 当任何工作簿被打开时触发 Private Sub App_WorkbookOpen(ByVal Wb As Workbook) On Error Resume Next ' 防止错误中断 Call YourGlobalMacro(Wb) ' 传递当前打开的工作簿对象 End Sub
-
-
绑定事件到Application对象:
-
双击PERSONAL.XLSB下的ThisWorkbook
→ 输入代码:
Private myAppHandler As clsAppEvents ' 声明类实例 ' 当Personal.xlsb加载时绑定事件 Private Sub Workbook_Open() Set myAppHandler = New clsAppEvents ' 初始化类 Set myAppHandler.App = Application ' 绑定到全局Application对象 End Sub
-
步骤 3:编写全局宏
-
在Personal.xlsb中插入模块:
-
右键插入新模块 → 输入以下代码:
Sub YourGlobalMacro(Wb As Workbook) MsgBox "检测到工作簿被打开:" & Wb.Name, vbInformation ' 示例:在所有工作簿中自动执行操作 Wb.Sheets(1).Range("A1").Value = "AutoMacro Executed!" If Wb.Name <> "PERSONAL.XLSB" Then With ActiveWindow .SplitRow = 3 ' 分割线在第1行下方 .SplitColumn = 1 .FreezePanes = True ' 冻结窗格 End With ' 或调整指定区域的列宽(例如A到C列) Range("A:Z").Columns.AutoFit End If End Sub // 版本2 Sub YourGlobalMacro(Wb As Workbook) 'MsgBox "检测到工作簿被打开:" & Wb.Name, vbInformation ' 示例:在所有工作簿中自动执行操作 'Wb.Sheets(1).Range("A1").Value = "AutoMacro Executed!" If Wb.Name <> "PERSONAL.XLSB" Then With ActiveWindow .SplitRow = 3 ' 分割线在第1行下方 .SplitColumn = 1 .FreezePanes = True ' 冻结窗格 End With Call AutoFitSelectionWithMaxWidth End If End Sub Sub AutoFitSelectionWithMaxWidth() Dim maxWidth As Double maxWidth = 100 ' 或调整指定区域的列宽(例如A到C列) Range("A:Z").Columns.AutoFit For Each col In Range("A:Z").Columns If col.ColumnWidth > maxWidth Then col.ColumnWidth = maxWidth End If Next col End Sub
-
步骤 4:保存并验证
-
保存到XLSTART文件夹:
-
按Ctrl + S→ 确保路径为:
C:\Users\<用户名>\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB
-
-
重启Excel并测试:
- 关闭所有Excel窗口,重新打开Excel。
- 新建或打开任意Excel文件(如Test.xlsx):
- 应弹出消息框显示文件名,且A1单元格被写入内容。
步骤 5:导出给其他人使用
复制 PERSONAL.XLSB ,可以给其他人使用,放入用户 对应目录下:
C:\Users<用户名>\AppData\Roaming\Microsoft\Excel\XLSTART