Excel VBA 编程基础学习笔记 · 第四章:事件编程 - 打造智能交互的自动化引擎

目录

第四课:Excel VBA事件过程

1、EXCEL事件程序定义与作用

2、事件程序基础

3、工作表事件实例1(自选计算与投票统计)

4、工作表事件实例2(状态栏地址与防工作表名更改)

5、工作表事件实例3(自动列出工作表名与单元格区域保护)

6、工作簿事件实例1(自动选择月份表、右键禁用、打印控制)

7、工作簿事件实例2(给工作表加密码)

8、应用程序事件基础与实例


本章将解锁VBA的真正威力:无需手动运行宏,让Excel自动响应你的每一个操作。

第四课:Excel VBA事件过程

1、EXCEL事件程序定义与作用

excel事件程序:因一个操作(动作)而触发一个程序,让程序发生运行

事件类型代码位置
工作表事件工作表
工作簿事件工作簿(ThisWorkbook)
程序事件工作簿(ThisWorkbook)或类模块
应用程序事件事件说明
NewWorkbook当新建一个工作簿时发生此事件。
SheetActivate当激活任何工作表时发生此事件。
SheetBeforeDoubleClick在双击任何工作表前发生此事件。
SheetBeforeRightClick在右键单击任何工作表前发生此事件。
SheetCalculate在重新计算工作表时发生此事件。
SheetChange更改任何工作表的单元格时发生此事件。
SheetDeactivate当工作表失去焦点时发生此事件(离开工作表时)。
SheetFollowHyperlink在单击工作簿中的任何超链接时发生。
SheetPivotTableUpdate在更新数据透视表的工作表后发生。
SheetSelectionChange所选内容在任何工作表上更改时发生。
WindowActivate在激活任何工作簿窗口时发生。
WindowDeactivate工作簿的窗口变为非活动状态时,将产生本事件。
WindowResize改变工作簿窗口大小时发生。
WorkbookActivate当激活任何工作簿时发生此事件。
WorkbookAddinInstall工作簿作为加载宏安装时发生此事件。
WorkbookAddinUninstall当任一工作簿作为加载宏卸载时发生。
WorkbookAfterXmlExport在保存或导出工作簿中的XML数据之后发生此事件。
WorkbookAfterXmlImport当刷新现有的XML数据链接或新的XML数据被导入任一打开的Excel工作簿之后时发生。
WorkbookBeforeClose关闭任何工作簿前发生此事件。
WorkbookBeforePrint在打印工作簿前发生此事件。
WorkbookBeforeSave在保存任何工作簿前发生此事件。
WorkbookBeforeXmlExport保存或导出XML数据前发生的事件。
WorkbookBeforeXmlImport当刷新现有的XML数据链接或新的XML数据被导入任一打开的Excel工作簿之前时发生。
WorkbookDeactivate当打开的工作簿转为非活动状态时发生此事件。
WorkbookNewSheet在任何打开的工作簿中新建工作表时发生此事件。
WorkbookOpen当打开一个工作簿时发生此事件。
WorkbookPivotTableCloseConnection在数据透视表的连接关闭之后发生此事件。
WorkbookPivotTableOpenConnection在数据透视表的连接打开之后发生此事件。
WorkbookRowsetComplete如果用户在OLAP数据透视表上深化记录集或调用行集操作,则会发生此事件。
WorkbookSync当作为“文档工作区”一部分的工作簿的本地副本与服务器上的副本进行同步时发生此事件。
工作簿事件事件说明
Activate激活工作簿、工作表、图表工作表或嵌入式图表时发生此事件。
AddinInstall当工作簿作为加载宏安装时,发生此事件。
AddinUninstall当工作簿作为加载宏卸载时,发生此事件。
AfterXmlExport在Excel保存或导出指定工作簿中的XML数据之后发生此事件。
AfterXmlImport在刷新现有的XML数据链接或将新的XML数据导入到指定的Excel工作簿之后,发生此事件。
BeforeClose在关闭工作簿之前,先产生此事件。如果该工作簿已经更改过,则本事件在询问用户是否保存更改之前产生。
BeforePrint在打印指定工作簿(或者其中的任何内容)之前,发生此事件。
BeforeSave保存工作簿之前发生此事件。
BeforeXmlExport在Excel保存或导出指定工作簿中的XML数据之前发生此事件。
BeforeXmlImport在刷新现有的XML数据链接或将新的XML数据导入到指定的Excel工作簿之前,发生此事件。
Deactivate图表、工作表或工作簿被停用时发生此事件。
NewSheet当在工作簿中新建工作表时发生此事件。
Open打开工作簿时,发生此事件。
PivotTableCloseConnection数据透视表关闭与其数据源的链接后发生此事件。
PivotTableOpenConnection数据透视表打开与其数据源的链接后发生此事件。
RowsetComplete如果用户在OLAP数据透视表上深化记录集或调用行集操作,则会引发此事件。
SheetActivate激活任何工作表时发生此事件。
SheetBeforeDoubleClick当双击任何工作表时发生此事件,此事件先于默认的双击操作发生。
SheetBeforeRightClick右键单击任一工作表时发生此事件,此事件先于默认的右键单击操作。
SheetCalculate在重新计算工作表时或在图表上绘制更改的数据之后发生此事件。
SheetChange当用户或外部链接更改了任何工作表中的单元格时发生此事件。
SheetDeactivate当任何工作表停用时发生此事件。
SheetFollowHyperlink单击Excel中的任何超链接时发生此事件。
SheetPivotTableUpdate在数据透视表的工作表更新之后发生此事件。
SheetSelectionChange任一工作表的选定区域发生更改时,将发生此事件。
Sync当作为“文档工作区”一部分的工作表的本地副本与服务器上的副本进行同步时,发生此事件。
WindowActivate工作簿窗口被停用时发生此事件。
WindowDeactivate任何工作簿窗口调整大小时发生此事件。
WindowResize任何工作簿窗口被停用时发生此事件。
工作表事件事件说明
Activate激活工作簿、工作表、图表等时发生的事件。
BeforeDoubleClick在工作表中双击前发生的事件。
BeforeRightClick在工作表中右键单击前发生的事件。
Calculate工作表重新计算之后发生的事件。
Change更改工作表中的单元格发生的事件。
Deactivate工作表、图表停用(焦点离开)时发生的事件。
FollowHyperlink单击工作表上的任意超链接时,发生此事件。
PivotTableUpdate工作簿中的数据透视表更新后发生此事件。
SelectionChange工作表上选定区域发生改变时发生的事件(点击单元格、拖动区域选择等都会发生)。

2、事件程序基础

'以下是sheet8中的事件程序

'Change这个事件非常有用

PrivateSubWorksheet_Change(ByVal TargetAsRange)'在单元格中输入新的内容,然后回车或者焦点离开这个单元格后发生的事件

IfTarget.Address = "$J$9"Then模块1代码之程序调用测试'$J$9不能写成$j$9,因为它区分大小写

EndSub

'以下是thisworkbook中的事件

PrivateSubWorkbook_NewSheet(ByVal ShAsObject)

On Error Resume Next

i = InputBox("请输入工作表的名称")

Sh.Name = i

EndSub

'以下是禁止操作工作表的代码

PrivateSubWorksheet_SelectionChange(ByVal TargetAsRange)

IfTarget.Address <> "$A$1"Then[a1].Activate

EndSub

代码保护:工具--VBAProject属性-保护,然后设置密码(“查看时锁定工程”要打上勾)

3、工作表事件实例1(自选计算与投票统计)

'以下是sheet5的选择变化事件:投票统计

PrivateSubWorksheet_SelectionChange(ByVal TargetAsRange)

On Error Resume Next

IfTarget.Address = "$I$4"OrTarget.Address = "$J$4"OrTarget.Address = "$K$4"Then

Target.Value = Target.Value + 1

EndIf

EndSub

'以下是sheet1的选择变化事件中(自动计算)

PrivateSubWorksheet_SelectionChange(ByVal TargetAsRange)

Dima%, b%

ForEachrngInTarget

a = rng.Row

b = rng.Column

Cells(a, b + 1) = "=" & rng

Next

EndSub

4、工作表事件实例2(状态栏地址与防工作表名更改)

'以下是sheet9中防止修改工作表名的代码

PrivateSubWorksheet_SelectionChange(ByVal TargetAsRange)

IfSheet9.Name <> "需要保存"ThenSheet9.Name = "需要保存"

EndSub

'以下是sheet1中SelectionChange代码的

'在状态栏上显示出当前所选单元格区域的地址:

PrivateSubWorksheet_SelectionChange(ByVal TargetAsRange)

Target.Address(0, 0)显示的是相对地址格式,如A1:C9

Application.StatusBar = "当前所选区域是:" & Target.Address(0, 0)

Target.Address显示的是绝对地址格式: 如$A$1:$C$9

Application.StatusBar = "当前所选区域是:" & Target.Address

EndSub

PrivateSubWorksheet_Deactivate()

Application.StatusBar = ""'离开这个工作表后,状态的信息清空

EndSub

'以上两段代码要配合使用,才完美!如果要让每个工作表都有以上功能则可以把它升级为工作簿事件,详见下段代码

'以下是thisworkbook中的事件程序

PrivateSubWorkbook_SheetSelectionChange(ByVal ShAsObject, ByVal TargetAsRange)

Application.StatusBar = "当前所选区域是:" & Target.Address(0, 0)

EndSub

PrivateSubWorkbook_SheetDeactivate(ByVal ShAsObject)

Application.StatusBar = ""

EndSub

5、工作表事件实例3(自动列出工作表名与单元格区域保护)

'以下是sheet2中事件程序(自动列出所有工作表名)

Private SubWorksheet_Activate()

ForEachShInSheets

k = k + 1

Cells(k, "m") = Sh.Name

Next

EndSub

'以下是sheet6中的事件程序(单元格区域保护)

PrivateSubWorksheet_SelectionChange(ByVal TargetAsRange)

IfIntersect(Target, [a1:d6])IsNothingThen

MsgBox "你只能在[a1:d6]区域中工作"

[A1].Select

EndIf

EndSub

'以上代码是不严谨的,只要所选区域跟[a1:d6]区域有交集,则上面代码不会被执行。

6、工作簿事件实例1(自动选择月份表、右键禁用、打印控制)

'以下是thisworkbook中事件程序(自动选择激活工作表)

'打开工作簿时自动选择激活工作表

PrivateSubWorkbook_Open()

mon = Format(Now(), "m")

Sheets(mon & "月").Select

EndSub

'以下是thisworkbook中事件程序(禁用右键)

PrivateSubWorkbook_SheetBeforeRightClick(ByVal ShAsObject, ByVal TargetAsRange, CancelAsBoolean)

Cancel =True

EndSub

'以下是thisworkbook中事件程序(禁止打印)

'禁止打印

PrivateSubWorkbook_BeforePrint(CancelAsBoolean)

IfMonth(Now()) & "月" <> ActiveSheet.NameThen

MsgBox "不能打印"

Cancel =True

Else

MsgBox "能打印"

Cancel =False

EndIf

EndSub

7、工作簿事件实例2(给工作表加密码)

'*************************以下是给工作表加密码的两段代码**********************

'1、下面是要加密的工作表的工作表事件

PrivateSubWorksheet_Activate()

a = InputBox("请输入密码")

Ifa = 123Then

Cells.Font.Color = RGB(0, 0, 0)

Application.EnableEvents =False'禁用当前的事件程序,以免每次激活此表都提示输入密码

Else

Sheet1.Activate

EndIf

EndSub

'2、下面是thisworkbook中的事件:

PrivateSubWorkbook_Open()

Application.EnableEvents =True'配合前面的Application.EnableEvents = False 使用

Sheet20.Cells.Font.Color= RGB(255, 255, 255)

EndSub

8、应用程序事件基础与实例

'应用程序事件:每个打开工作簿因操作所发生的事件

'应用程序事件代码位置:thisworkbook或者类模块

'应用程序事件代码在thisworkbook中存在的先决条件:

' 1、申明变量

' Public WithEvents app As Excel.Application

' 2、工作簿打开时运行:

PrivateSubWorkbook_Open()

Set app = Excel.Application

EndSub

'

' 3、将1、2中的代码写在thisworkbook中,并保存为“加载宏”文件(xlam)

' 4、在加载宏菜单中加载第3步保存的加载宏文件。目的:任何时候都能依附在excel文件中

'

'实例:禁止新增工作表

' 1、以下是thisworkbook中的代码:

Public WithEvents appAsExcel.Application'申明变量

PrivateSubWorkbook_Open()

Set app = Excel.Application

EndSub

PrivateSubapp_WorkbookNewSheet(ByVal WbAsWorkbook, ByVal ShAsObject)

Application.DisplayAlerts =False

MsgBox "你没有权限新增工作表"

Sh.Delete

Application.DisplayAlerts =True

EndSub

'删除“加载宏”文件的办法:在excel中选择另存为,保存类型选择“加载宏”,然后删除相应位置的“加载宏”文件。

'然后,在加载项中去掉相应“加载宏”文件前的勾


计算机科学与技术 & 计算机网络技术:双专业课程体系完全导航指南

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1160211.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MIMO通信】MIMO检测器(ZF、MMSE、SIC、ML)在瑞利衰落下的BER性能比较【含Matlab源码 14929期】含报告

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;Matlab领域博客之家&#x1f49e;&…

BUUCTF-[ACTF2020 新生赛]Upload

打开靶机后发现是一个文件上传的题目随便上传一个文件观察路径和返回的方式是什么发现只能上传jpg,png,gif的文件上传一个jpg文件发现页面会回显返回的路径既然有路径了我们就可以尝试上传一句话木马了构造一句话木马<?phpeval($_POST[rc]);?>导入字典观察过滤的哪些后…

幂等性设计指南:从数据库唯一索引到 Redis Token,如何防止用户“手抖”重复提交?

标签: #架构设计 #幂等性 #Redis #数据库 #分布式系统 #面试必问 💣 前言:即使前端置灰了按钮,后端也必须防重 很多初级开发者认为:“我在前端点击按钮后,把按钮置灰(Disabled)不就行了吗?” 太天真。 懂点技术的用户可以直接调 API 接口。 弱网环境下,请求发出去了…

发刊不用愁:paperxie 期刊论文功能,一键匹配普通刊 / 核心刊的学术标准

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/aippt https://www.paperxie.cn/ai/journalArticleshttps://www.paperxie.cn/ai/journalArticles 对于科研人员和学生来说&#xff0c;“期刊论文投稿” 从来不是 “写完文字” 这么简单 —— 普通刊要符…

PointMAE的代码配环境+运行

PointMAE的笔记 PointMAE的代码地址 1. 环境配置 我的cuda是115安装Pointnet2_PyTorch总是失败 所以我在隔离环境中创建了cuda113的环境 参考pip 隔离环境内 安装 cuda 113 不覆盖原有的全局 cuda 115 1.1 安装torch pip install torch1.12.1cu113 torchvision0.13.1cu113…

CMake:现代C/C++项目的构建中枢

CMake&#xff1a;现代C/C项目的构建中枢 引言&#xff1a;从构建混乱到标准化 想象你正在开发一个跨平台的C库&#xff0c;需要在Windows、Linux、macOS上都能构建。在CMake出现之前&#xff0c;这意味着&#xff1a;为Visual Studio编写.vcxproj文件为Linux编写复杂的Mak…

【MIMO通信】基于matlab MIMO检测器(ZF、MMSE、SIC、ML)在瑞利衰落下的BER性能比较【含Matlab源码 14929期】含报告

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…

8 款 AI 毕业论文写作工具实测:拯救你的学术秃头季

又到毕业季&#xff0c;看着空白的 Word 文档和导师催稿的消息&#xff0c;不少同学直接陷入 “论文焦虑症”。别慌&#xff01;AI 写作工具已经成为当代毕业生的隐形外挂。我们实测了全网最火的 8 款 AI 毕业论文写作工具&#xff0c;从选题、框架到降重一站式搞定&#xff0c…

智能体反思模式:让AI从“会做“到“做好“的关键技术

智能体反思模式是让AI对自身输出进行评估并自我纠错的机制&#xff0c;通过"执行-评估-优化"闭环迭代提升输出质量。文章详解了其流程、价值&#xff08;减少人工修正、避免重复犯错、适配复杂场景&#xff09;和实现方式&#xff08;特别是"生产者-批评者"…

锁定Nature!小样本学习是真的好发

小样本机器学习&#xff5c;学术人不容错过的高产赛道&#xff01;数据稀缺是AI领域的长期痛点&#xff0c;而小样本学习以“少量数据就能实现高效学习”的核心优势&#xff0c;成为现实应用中不可或缺的技术&#xff0c;同时也成为学术研究的热门方向——技术迭代迅速、创新空…

基于改进鲸鱼优化算法的微网系统能量优化管理Matlab源码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1…

MyBatis:注解开发

在 MyBatis 的开发体系中&#xff0c;注解开发作为 XML 配置的补充方案&#xff0c;以其简洁直观的语法大幅简化了基础 CRUD 操作的代码编写。然而需要明确的是&#xff0c;该方式更适用于简单业务场景&#xff0c;不推荐在生产环境中大规模使用—— 复杂 SQL 的维护性、动态 S…

大模型智能体工程实践:Rock Roll训练系统的构建与优化【收藏学习】

该研究提出智能体学习生态系统(ALE)&#xff0c;包含ROLL训练框架、ROCK环境和iFlow CLI工具三层架构。创新性IPA算法基于语义交互块进行信用分配&#xff0c;提升长程训练稳定性。基于百万轨迹数据训练的ROME模型在SWE-bench等基准上表现优异&#xff0c;仅用30B参数就接近GPT…

2026年AI产品市场格局:多模态崛起,音乐生成爆发,程序员必看

SimilarWeb的2026年全球AI报告显示&#xff1a;通用AI流量滞涨&#xff0c;OpenAI市占率降至65%以下&#xff0c;Gemini上升至20%&#xff1b;音乐和音频生成增速最高&#xff1b;多模态产品访问量上涨&#xff1b;图像、写作和自动化工具流量下滑。AI原生应用冲击传统互联网平…

大模型工程师转型攻略:无需985学历,四大核心能力助你轻松入行

本文破除了大模型工程师高门槛的迷思&#xff0c;指出大多数企业需要的是应用工程师而非算法研究员。通过分析真实转型案例&#xff0c;文章总结出四大核心能力&#xff1a;提示工程、RAG检索增强生成、模型微调和工程部署能力。零基础程序员可通过系统学习一个月内产出可演示项…

【PaperXie毕业论文】从零到一的智能写作革命:AI如何重塑你的学术创作全流程

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/aippt https://www.paperxie.cn/ai/dissertationhttps://www.paperxie.cn/ai/dissertation ——告别熬夜改稿&#xff0c;开启“输入即输出”的高效学术时代 在2026年的今天&#xff0c;当人工智能已深度…

短剧广告联盟APP开发:数据对接与播放量、广告曝光量、收益联动统计方案

在短剧广告联盟APP的商业化体系中&#xff0c;播放量、广告曝光量与收益数据是衡量运营效果的核心指标&#xff0c;而三者的联动统计与精准对接&#xff0c;更是实现 “内容优化 - 广告策略调整 - 收益提升” 的关键前提。多数短剧APP 在开发阶段易陷入 “数据割裂、统计延迟、…

GEO营销全链路方案:附近搜索引流 + 到店优惠 + 会员裂变

一、方案概述本方案为实体门店打造基于地理位置&#xff08;GEO&#xff09;的数字化营销闭环&#xff0c;通过“线上精准引流-到店转化锁客-会员裂变增长”全链路设计&#xff0c;实现低成本、高效率的客源增长。二、核心玩法架构text附近搜索引流 → 到店专享优惠 → 会员体系…

羟基聚乙二醇多巴胺,HO-PEG-Do试剂的全能应用图解

试剂基本信息中文名&#xff1a;羟基聚乙二醇多巴胺&#xff0c;HO-PEG-醇多巴胺英文名&#xff1a;HO-PEG-Do&#xff0c;HO-PEG-dopamine分子量PEG&#xff1a;1k&#xff0c;2k&#xff0c;3.4k&#xff0c;5k&#xff0c;10k&#xff0c;20k&#xff08;其它分子量可按需定…

AI 赋能学术:paperxie 毕业论文功能,如何让硕士论文写作效率提升 80%?

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/aippt https://www.paperxie.cn/ai/dissertationhttps://www.paperxie.cn/ai/dissertation 在学术写作愈发依赖数字化工具的今天&#xff0c;“论文难写” 早已不是学生独有的焦虑 —— 从选题方向的模糊…