事件
文章平均质量分 54
taller_2000
不积跬步,无以至千里;不积小流,无以成江海
展开
-
VBA智能记录指定列更新时间戳
实例需求:某公司产品统计表如下所示,为了便于追溯变更,如果用户修改了“厂家指导价”或者“供货价”,那么“修改时间列”需要记录当前的时间。这个需要似乎也并不复杂,使用`Worksheet_Change`事件判断变化发生的列,然后再时间戳即可。但是每个公司都有一些奇葩的用户(领导),他们会用尽毕生精力来折腾这个表,为了满足这些奇葩用户需求,此功能需要支持如下场景:- 用户可以在任意位置插入\删除列- 用户可以在表格之上或者左侧插入任意多行原创 2024-04-14 13:29:47 · 564 阅读 · 0 评论 -
如何锁定Excel表格(超级表)中的公式
实例需求:Excel的格式化表格(有时被称为超级表[非官方名称],通过`插入>表格`创建,下文简称为表格)是具备很多实用的功能,例如自动扩展表格并应用原格式和公式等等。如果表格中使用了公式列,那么有些小白用户可能会不小心修改某个单元格的公式,这种问题查找起来也很麻烦。有的同学可能说保护工作表(表格中的公式列)就可以了,其实不然,保护工作表虽然避免了用户意外修改公式,但是表格的自动扩展等功能也失效了。是否可以即不牺牲表格的易用性,又可以实现保护表格中的公式呢?效果如下图所示,B列和D列为公式列,无论如何如原创 2024-03-11 03:41:35 · 600 阅读 · 1 评论 -
Excel表格的快速动态扩展与删除行
实例需求:工作表中的表格(ListObject)名称为`Table1`,表格列数不确定,需要实现如下功能:- 当用户完成最后一行最后一列输入之后(如果该单元格为空,则视为输入未完成),表格自动扩展一行- 扩展行中,第一列填充自动序号,其他列填充NA- 如果用户双击表格中最后一行的任意单元格,那么删除该行,并相应调整表格单元格范围原创 2024-01-19 14:45:10 · 599 阅读 · 0 评论 -
VBA窗体跟随活动单元格【简易版】(2/2)
上一篇博客(文章连接如下)中使用工作表事件`Worksheet_SelectionChange`实现了窗体跟随活动单元格的动态效果。> [VBA窗体跟随活动单元格【简易版】(1/2)](https://blog.csdn.net/taller_2000/article/details/133854760)为了在用户滚动工作表窗体之后仍能够实现跟随效果,需要使用`Application.Windows(1).VisibleRange`对于显示位置进行调整。俗话说,条条大路通罗马,本文将接受另外一个实现原创 2024-01-19 14:01:51 · 648 阅读 · 0 评论 -
限制选中指定个数CheckBox控件(1/2)
实例需求:工作表中有8个CheckBox控件(下文中简称为控件),现在需要实现限制用户最多只能勾选4个控件。原创 2024-01-05 13:01:39 · 526 阅读 · 0 评论 -
VBA动态按钮控制台
Excel工作表中可用使用两种命令按钮(ActiveX和窗体控件),但是这些按钮外观的定制并不方便,其实Shape对象完全可用作为按钮,使用方法类似窗体控件按钮,并且可用轻松定制其外观。现在需要实现如下效果:5个按钮作为一组用户单击某个按钮,此按钮变色并启用3D样式原创 2023-11-17 10:16:33 · 307 阅读 · 0 评论 -
VBA自动动态复制数据
实例需求:根据A3单元格(黄色)的输入值动态复制第11行数据,并且在A列填充顺序编号,如下图所示。如果A3单元格输入的数值小于当前已复制的行数,则清除多余数据行。如果A3单元格为0时,则仅保留序号1的行内容,和A3单元格为1时的效果相同,如下图所示。原创 2023-07-01 12:18:34 · 1281 阅读 · 0 评论 -
VBA检查指定应用程序是否已经打开
VBA中提供了`CreateObject`和`GetObject`两种方法获得对象实例,二者的区别在于`GetObject`用于获取已经打开的应用程序对象,但是如果该应用程序并没有打开,那么将产生运行时错误,代码中需要加入额外的错误处理代码。在任务管理器中可以轻松的查看当前已经打开的应用程序,如下图所示。原创 2023-02-01 07:25:21 · 2209 阅读 · 0 评论 -
如何为VBA的私有过程设置快捷键
VBA中的Sub过程有两种,分别是公用(Public)和私有(Private),如果Sub之前省略关键字,那么该过程为公用过程。运行过程SetShortKey,在Excel界面中按组合键,将运行过程。单击【宏】对话框中【选项】按钮,打开【宏选项】对话框,可以为代码过程设置快捷键,如下图所示。答案是肯定的,Excel操作界面中无法直接设置,可以使用VBA代码过程进行设置。那么问题来了,【宏】对话框中不显示私有过程,是否可以为私有过程设置快捷键呢?在【宏】对话框中,仅显示公用过程。...原创 2022-07-23 13:17:56 · 1554 阅读 · 0 评论 -
如何禁止修改Excel工作表名称
经常会有网友提问:如何实现禁止修改Excel工作表名称,这个暂时没有完美解决方案,但是如下变通解决方法基本上可以满足需求。示例文件中有两个工作表,名称为Summary和Sheet2,假设禁止修改第一个工作表名称。修改Excel工作表名称时,涉及跨表引用公式中的工作表名称会自动更新,无需大家操心,所以固定工作表名称一般是两个目的:便于在VBA中引用工作表对象表格文件更加规范化对于第一个目的,其实也更好的解决方法,用户无法在Excel界面中修改工作表的CodeName,所以在VBA代码中使用Cod原创 2021-02-28 15:38:42 · 1667 阅读 · 0 评论 -
你真的知道如何使用Target.Count吗?
工作表的Change和SelectChange事件是VBA开发中最常用的事件。两个过程的参数都有Range类型的对象变量Target,为了确保Excel操作时只是选中了单个单元格,经常会使用如下代码。Count属性返回值为Long,查阅一下帮助可以得知Long类型数据的范围是:-2,147,483,648至2,147,483,647。从Excel 2007开始,一个工作表中的单元格数量为 1048576(行) * 16384 (列)= 17,179,869,184,这个数远远超过了Long类型数据的范围。原创 2020-06-16 11:49:43 · 5161 阅读 · 0 评论 -
Excel工作表事件(5)- SelectionChange事件
Excel工作表SelectionChange事件也是最常用的事件代码之一,通俗的讲工作表选中的单元格发生变化时,此事件将被激活。SelectionChange事件的过程框架如下,其中参数Target是Range类型变量,代表工作表中被选中的单元格区域。原创 2020-03-19 12:58:03 · 11666 阅读 · 0 评论 -
Excel工作表事件(4)- 单元格修订记录跟踪
Change事件看起来并不复杂,但是在很多应用场景,都会用到Change事件,并且可以给大家带来很多工作上的便利性。例如很多用户都希望能够保存单元格内容的修订记录,但是靠人工记录下来这个修改过程,确实有些繁琐,合理使用Change事件,就可以实现这个功能,修订记录保存在单元格批注中。当前数据表内容如下所示。现在做如下修改:Math_05 >> CS_01Tom >...原创 2020-03-15 14:12:57 · 1290 阅读 · 6 评论 -
Excel工作表事件(3)- Change事件连锁反应
Excel工作表Change事件是最常用的事件代码之一,通俗的讲工作表内容发生变化时,此事件将被激活。这个事件代码貌似很简单,事件被激活后,使用代码想干啥就干啥,然后呢 … 就没有然后了。先了看一个很常见的需求,在第一行任意单元格输入任意内容后,在该单元格之下记录当前的日期,这个就是典型的Change事件应用,3行代码将搞定。Private Sub Worksheet_Change(ByVal...原创 2020-03-15 12:18:45 · 2418 阅读 · 0 评论 -
Excel工作表事件(2)- Change事件
Excel工作表Change事件是最常用的事件代码之一,通俗的讲工作表内容发生变化时,此事件将被激活。Change事件的过程框架如下,其中参数Target是Range类型变量,代表工作表中发生变化的单元格范围。Private Sub Worksheet_Change(ByVal Target As Range) ' Your codeEnd Sub下面来看一个最简单示例,将代码写入工作...原创 2020-02-29 15:34:48 · 6624 阅读 · 2 评论 -
Excel工作表事件(1)
在VBA中事件是指对象可以辨认的动作,用户可以指定VBA代码来对这些动作做出响应。Excel可以监视多种不同类型的事件,例如Excel中的工作表、工作簿、应用程序、图表工作表、透视表和控件等对象都可以响应事件,而且每个对象都有多种相关的事件。事件过程作为一种特殊的Sub过程,在满足特定条件时被触发执行,如果事件过程包含参数,系统会为相关参数赋值。事件过程必须写入相应的模块中才能发挥其作用。例如...原创 2020-02-27 14:48:59 · 2439 阅读 · 0 评论 -
如何防止Excel工作表名称被修改
在Excel工作表标签上双击可以修改名称,如果其他工作簿中公式使用了对于此工作表的外部引用,那么工作表名称变化后,这些外部引用经失效,在VBA代码中通过工作表名称引用对象也将出错。利用VBA对象事件代码可以一定程度上的实现防止Excel工作表名称被修改。假设实例文件中的工作表名称为“DEMO”,在该工作表模块中增加如下事件代码。Private Sub Worksheet_SelectionCh...原创 2020-01-29 14:51:53 · 3203 阅读 · 0 评论 -
【代码模板001】Excel系统设置
前言 写VBA代码的小伙伴们可能多数都不是职业码农,大家也没有那么多酷炫的编辑器。但是很多代码却是经常用到,也许一天用好几次,每次敲键盘到心烦。 【代码模板】系列收录一下经常用到的代码块,希望能够对于VBA爱好者有帮助,COPY PASTE就可以了。 开讲了... ... VBA中经常需要修改一些Excel设置,程序结束时需...原创 2018-02-24 04:45:06 · 469 阅读 · 0 评论 -
【代码模板004】VBA快速删除工作表
在博文 VBA添加工作表详解 中为大家讲了如何使用一句代码在指定位置插快速入指定名称的工作表。但是如果工作簿中已经存在同名工作表,那么运行时错误’1004‘就不期而遇的跳了出来。 老规则 —— 先删除再创建,删除工作表很简单嘛,Sheets(..).Delete一句代码搞定。怎么又弹出一个消息窗口,Excel的产品经理考虑过宝宝们的用户体验吗!?删除工作表也搞得这么复杂,又不是从银行账户里转...原创 2018-03-01 02:34:00 · 9767 阅读 · 0 评论 -
动态添加和删除VBA代码过程
VBA代码删除代码,是自相残杀吗?非也,是定点清除,呵呵 言归正传,VBA是个不错的开发工具,一般情况下,程序猿开发测试代码之后,才会将Excel文件分发给最终的用户,此时代码已经保存在文件中,属于已经完成的静态代码。但是有时也需要用代码去产生(或者删除)代码。例如:用代码在工作表中动态添加ActiveX控件按钮,并添加按钮的Click事件代码。Sub AddBtnA...原创 2018-02-27 00:31:32 · 10148 阅读 · 0 评论