Excel 自动执行全局宏

Excel 自动执行全局宏 25.04.09

步骤 1:创建个人宏工作簿(Personal.xlsb)

  1. 生成Personal.xlsb

    (如尚未存在):

    • 打开Excel → 开发工具 → 录制宏 → 选择"保存到个人宏工作簿" → 停止录制。
    • Alt + F11 进入VBA编辑器,确认左侧出现 PERSONAL.XLSB

步骤 2:在Personal.xlsb中设置全局事件监听

  1. 插入类模块

    • 右键点击 PERSONAL.XLSB → 插入 → 类模块 → 重命名为 clsAppEvents

    • 在类模块中输入以下代码:

      vba 复制代码
      Public WithEvents App As Application  ' 声明应用程序级事件
      
      ' 当任何工作簿被打开时触发
      Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
          On Error Resume Next  ' 防止错误中断
          Call YourGlobalMacro(Wb)  ' 传递当前打开的工作簿对象
      End Sub
  2. 绑定事件到Application对象

    • 双击PERSONAL.XLSB下的ThisWorkbook

      → 输入代码:

      vba 复制代码
      Private myAppHandler As clsAppEvents  ' 声明类实例
      
      ' 当Personal.xlsb加载时绑定事件
      Private Sub Workbook_Open()
          Set myAppHandler = New clsAppEvents  ' 初始化类
          Set myAppHandler.App = Application  ' 绑定到全局Application对象
      End Sub

步骤 3:编写全局宏

  1. 在Personal.xlsb中插入模块:

    • 右键插入新模块 → 输入以下代码:

      vba 复制代码
      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:保存并验证

  1. 保存到XLSTART文件夹:

    • 按Ctrl + S→ 确保路径为:

      复制代码
      C:\Users\<用户名>\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB
  2. 重启Excel并测试:

    • 关闭所有Excel窗口,重新打开Excel。
    • 新建或打开任意Excel文件(如Test.xlsx):
      • 应弹出消息框显示文件名,且A1单元格被写入内容。

步骤 5:导出给其他人使用

复制 PERSONAL.XLSB ,可以给其他人使用,放入用户 对应目录下:

C:\Users<用户名>\AppData\Roaming\Microsoft\Excel\XLSTART

相关推荐
深蓝电商API16 小时前
实战:爬取豆瓣电影Top250,并生成Excel榜单
爬虫·python·excel
未来之窗软件服务16 小时前
万象EXCEL开发(八)excel公式解析与依赖映射 ——东方仙盟金丹期
前端·excel·仙盟创梦ide·东方仙盟·万象excel
啦啦9117141 天前
Print Conductor打印软件安装教程!一款非常好用的批量打印软件!支持PDF、Word、Excel、图片等
pdf·excel
专注VB编程开发20年1 天前
VBA ADO使用EXCEL 8.0驱动读取 .xlsx 格式表格数据-有限支持
excel·vba·ado·excel 8.0·ace.oledb
清霁。1 天前
实用Excel学习资料包(含操作+函数+图表教程)
excel
CDA数据分析师干货分享1 天前
【CDA干货】Excel 的 16类常用函数之计算统计类函数
大数据·数据挖掘·数据分析·excel·cda证书·cda数据分析师
猪猪侠|ZZXia1 天前
# vim中给变量添加双引号
编辑器·vim·excel
笨蛋不要掉眼泪2 天前
SpringBoot项目Excel成绩录入功能详解:从文件上传到数据入库的全流程解析
java·vue.js·spring boot·后端·spring·excel
2501_930707782 天前
C#:将Excel转换为HTML时将图像嵌入HTML中
excel
咬尾巴的猫在coding2 天前
pandas读取和写入excel
excel·pandas