【笔记】Excel 2021|VBA不可不说的注意事项(第一篇)|VBA精准控制选择范围、VBA提高运行速度并降低运行时的内存消耗
最近总是遇到只有Excel表、没有数据库的情况,不太可能让别人搭Python环境来建数据库,但对常用数据库的使用也不太熟悉,也没买服务器不能让别人远程操控。再加上Python操作Excel的效率令人发指,不妨退而求其次直接学会VBA。
没想到坑挺多的,来分享一下其中的典型。考虑到之后可能还需要使用它,可能还会遇到其他天坑,因此,不妨将本文提到的作为VBA不可不说的注意事项(第一篇)。
文章目录
要想运行之后Excel文件的大小不爆炸,你需要……
慎用Cells.xxx、Range(A:A)等选择范围极其广的,精确选择范围
引言
举个例子,原始表格如下图所示,10KB:

我添加一个筛选器,设置成绩>19,结果如下,Excel文件大小不变:

接下来,我全选(也就是Cells的选择范围),将这个筛选结果复制到另一个Sheet工作表中,并保存:

您猜怎么着?
——文件大小直接爆炸啦!

并且更糟糕的是,此时再删除新表,文件大小也不会完美复原了。

不过好消息是,Ctrl+Z撤回操作可以将大小完美复原。
但谁编程的时候会没事用Ctrl+Z啊?
编程技巧
最关键的是,确定范围的代码:
LastRow = Range("A" & Rows.Count).End(xlUp).Row
Range("A1:N" & LastRow).Select
第一行,令 LastRow = 第A列的行数;
第二行,精确选择所需要的范围,A1到N[LastRow]。
倘若直接Cells.Select,就容易出现选了非常非常多没用的东西的情况。
要想运行时内存不爆炸,你需要……
禁用应用程序屏幕更新、禁用事件
在每个编写的宏的最开始加上这三行:
ActiveWorkbook.Save
Application.ScreenUpdating = False
Application.EnableEvents = False
结尾加上这三行:
ActiveWorkbook.Save
Application.ScreenUpdating = True
Application.EnableEvents = True
这些代码禁用应用程序屏幕更新、禁用事件。这保证你的宏在运行时,屏幕不会闪来闪去的,Excel运存不会爆炸,同时较好地提高运行速度(亲测提高一倍左右)。等运行完了,屏幕才会统一发生变化。
参考:Excel,VBA:清除内存-码农家园-StackFlow译文,该文还提出使用Evaluate直接计算值,而不是将公式放入表中,会加速。
【笔记】Excel 2021|VBA不可不说的注意事项(第一篇)|VBA精准控制选择范围、VBA提高运行速度并降低运行时的内存消耗的更多相关文章
- Java学习笔记——浅谈数据结构与Java集合框架(第一篇、List)
横看成岭侧成峰,远近高低各不同.不识庐山真面目,只缘身在此山中. --苏轼 这一块儿学的是云里雾里,咱们先从简单的入手.逐渐的拨开迷雾见太阳.本次先做List集合的三个实现类的学习笔记 List特点: ...
- [快手(AAuto)学习笔记]如何让程序在运行时请求管理员权限(UAC)
作者:ffsystem 作为(糟糕的)程序猿,习惯写代码解决一些简单事务.正常用批处理就能解决大部分工作,复杂一点用AutoIt 3. 有时候要分发给别人,就需要一个界面.外行你程序写得如何他看不懂, ...
- Java学习笔记:2021年12月31日下午-2022年1月1日上午
Java学习笔记:2021年12月31日下午-2022年1月1日上午 摘要:主要记录了计算机的电气构成,学习Linux系统的原因以及关于Linux以及相关操作的基础知识. 目录 Java学习笔记:20 ...
- Java学习笔记 :2021年12月31日 上午
Java学习笔记 :2021年12月31日 上午 目录 Java学习笔记 :2021年12月31日 上午 关于计算机语言 1.关于语言的分类 2.小结 关于Java语言的基础语法 1.主方法 2.其他 ...
- VBA Dumper v0.1.4.2, 提取office文档中的VBA代码,监查宏病毒恢复代码(演示版
http://club.excelhome.net/thread-970051-1-1.html VBA Dumper 0.1.4.2更新,填补国内同类程序空白 此程序为演示版,可以在无office的 ...
- 【集中工作薄】 当前文件夹中所有Excel文件中 多个工作簿的第一个工作表 复制到工作簿中
功能:当前文件夹中所有Excel文件中 多个工作簿的第一个工作表 复制到工作簿中 Sub Books2Sheets() '定义对话框变量 Dim fd As FileDialog Set fd = A ...
- 个人永久性免费-Excel催化剂功能第21波-Excel与Sqlserver零门槛交互-执行SQL语句篇
在前两波中,已完成了Excel与Sqlserver的查询和上传功能,但难免许多临时的或更深入地操作数据库需要用Sql语句来操作,对一般用户电脑里,不可能有条件轻易安装一个数据库客户端软件,就算安装了对 ...
- Android M Permission 运行时权限 学习笔记
Android M Permission 运行时权限 学习笔记 从Android 6.0开始, 用户需要在运行时请求权限, 本文对运行时权限的申请和处理进行介绍, 并讨论了使用运行时权限时新老版本的一 ...
- 《javascript权威指南》读书笔记——第一篇
<javascript权威指南>读书笔记——第一篇 金刚 javascript js javascript权威指南 由于最近想系统学习下javascript,所以开始在kindle上看这本 ...
- .net开发笔记(十三) Winform常用开发模式第一篇
上一篇博客最后我提到“异步编程模型”(APM),之后本来打算整理一下这方面的材料然后总结一下写篇文章与诸位分享,后来在整理的过程中不断的延伸不断地扩展,发现完全偏离了“异步编程”这个概念,前前后后所有 ...
随机推荐
- Asp.Net Core3.0 微信转账到零钱
参考文档: 微信付款到零钱开发文档:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2 用于向微信用户个人付款, ...
- Java开发中long类型转换json传递到前端后精度丢失问题
将文章的id由long类型手动改为String类型(需要修改表结构); 可以使用Jackson进行序列化解决
- 小米9刷twrp Rec 以及写入Magisk详细教程
首先手机必须先解锁BL锁才能继续: ---------------------- 小米官方BL解锁教程:点此看教程 ---------------------- 解完锁后开始操作: 工具包:点此下载 ...
- 使用Bioaider进行本地blast
系统环境为windows11 1. 下载blast程序 https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/ 双击安装,记住自己的 ...
- Linux - 服务器磁盘 Raid & 分区 & 挂载
一.流计算服务器 有一台流处理服务器(系统盘:2*600G.数据盘:6*600G)分区挂载如下: 设备名 分区 大小 挂载点 文件系统类型 磁盘用途 分区类别 /dev/sda /dev/sda1 3 ...
- Shell - shell中的运算符
基本语法 使用案例 基本语法 $((运算式)) $[ 运算式 ] 使用案例 # 第一种写法 a=10 b=20 c=`expr ${a} + ${b}` echo "$c" # 第 ...
- 再谈Mysql undo log, redo log与binlog
一.undo log 1.undo log有两个作用 提供回滚和多个行版本控制(MVCC). 在数据修改的时候,不仅记录了redo log,还记录了对应的undo,如果因为某些原因事务失败而回滚,可以 ...
- php解析url并得到url中的参数及获取url参数的四种方式
https://www.jb51.net/article/73900.htm 下面通过四种实例给大家介绍php url 参数获取方式. 在已知URL参数的情况下,我们可以根据自身情况采用$_GET来获 ...
- 【ABAQUS模态动力学】Composite&abaqus 预应力模态分析&输出单元刚度矩阵
参考 连接器振动脱落_abaqus重启动分析_显式隐式切换_插拔力预应力模态_TeeSim天深科技 Abaqus预应力模态分析 附Abaqus 分析用户手册材料卷下载- 技术邻 Natural fre ...
- Mac 干净彻底地卸载 MySQL
前言 卸载MySQL,首先得知道MySQL的路径.默认的话是在/usr/local文件夹下的. 在系统偏好设置面板中可以看到之前安装的MySQL,此时若想卸载MySQL,可以按照如下步骤来. 之前安装 ...