最近总是遇到只有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提高运行速度并降低运行时的内存消耗的更多相关文章

  1. Java学习笔记——浅谈数据结构与Java集合框架(第一篇、List)

    横看成岭侧成峰,远近高低各不同.不识庐山真面目,只缘身在此山中. --苏轼 这一块儿学的是云里雾里,咱们先从简单的入手.逐渐的拨开迷雾见太阳.本次先做List集合的三个实现类的学习笔记 List特点: ...

  2. [快手(AAuto)学习笔记]如何让程序在运行时请求管理员权限(UAC)

    作者:ffsystem 作为(糟糕的)程序猿,习惯写代码解决一些简单事务.正常用批处理就能解决大部分工作,复杂一点用AutoIt 3. 有时候要分发给别人,就需要一个界面.外行你程序写得如何他看不懂, ...

  3. Java学习笔记:2021年12月31日下午-2022年1月1日上午

    Java学习笔记:2021年12月31日下午-2022年1月1日上午 摘要:主要记录了计算机的电气构成,学习Linux系统的原因以及关于Linux以及相关操作的基础知识. 目录 Java学习笔记:20 ...

  4. Java学习笔记 :2021年12月31日 上午

    Java学习笔记 :2021年12月31日 上午 目录 Java学习笔记 :2021年12月31日 上午 关于计算机语言 1.关于语言的分类 2.小结 关于Java语言的基础语法 1.主方法 2.其他 ...

  5. VBA Dumper v0.1.4.2, 提取office文档中的VBA代码,监查宏病毒恢复代码(演示版

    http://club.excelhome.net/thread-970051-1-1.html VBA Dumper 0.1.4.2更新,填补国内同类程序空白 此程序为演示版,可以在无office的 ...

  6. 【集中工作薄】 当前文件夹中所有Excel文件中 多个工作簿的第一个工作表 复制到工作簿中

    功能:当前文件夹中所有Excel文件中 多个工作簿的第一个工作表 复制到工作簿中 Sub Books2Sheets() '定义对话框变量 Dim fd As FileDialog Set fd = A ...

  7. 个人永久性免费-Excel催化剂功能第21波-Excel与Sqlserver零门槛交互-执行SQL语句篇

    在前两波中,已完成了Excel与Sqlserver的查询和上传功能,但难免许多临时的或更深入地操作数据库需要用Sql语句来操作,对一般用户电脑里,不可能有条件轻易安装一个数据库客户端软件,就算安装了对 ...

  8. Android M Permission 运行时权限 学习笔记

    Android M Permission 运行时权限 学习笔记 从Android 6.0开始, 用户需要在运行时请求权限, 本文对运行时权限的申请和处理进行介绍, 并讨论了使用运行时权限时新老版本的一 ...

  9. 《javascript权威指南》读书笔记——第一篇

    <javascript权威指南>读书笔记——第一篇 金刚 javascript js javascript权威指南 由于最近想系统学习下javascript,所以开始在kindle上看这本 ...

  10. .net开发笔记(十三) Winform常用开发模式第一篇

    上一篇博客最后我提到“异步编程模型”(APM),之后本来打算整理一下这方面的材料然后总结一下写篇文章与诸位分享,后来在整理的过程中不断的延伸不断地扩展,发现完全偏离了“异步编程”这个概念,前前后后所有 ...

随机推荐

  1. mysql where条件:某时间字段为今天的sql语句

    1.查询:注册时间为今天的所有用户数: select count(*) from customer where TO_DAYS(createtime) = TO_DAYS(NOW()) 2.获取当前时 ...

  2. 26考研高数习题:1.1. 分段&复合函数

    §1.1. 分段&复合函数 更详细的考研数学精讲请访问「荒原之梦考研数学」 Ultra 版:www.zhaokaifeng.com 001 题目 设 \(g⁡⁡\left(x\right) = ...

  3. 机器学习中的 K-均值聚类算法及其优缺点

    K-均值聚类算法是一种经典的机器学习算法,用于将数据集分成 K 个不同的簇.它是一种无监督学习算法,即不需要标签或任何先验知识来指导聚类过程. 算法的工作原理如下: 随机选择 K 个数据点作为初始聚类 ...

  4. scala - [01] 概述

    题记部分 001 || 介绍 (1)Spark -- 新一代内存级大数据计算框架,是大数据的重要内容 (2)Spark就是使用Scala编写的.因此为了更好的学习Spark,需要掌握Scala. (3 ...

  5. Flink学习(十四) Flink 窗口、时间和水位线

    Flink 框架中支持事件时间.摄入时间和处理时间三种.而当我们在流式计算环境中数据从 Source 产生,再到转换和输出,这个过程由于网络和反压的原因会导致消息乱序.因此,需要有一个机制来解决这个问 ...

  6. 启动hive,报错 Name node is in safe mode.

    在学习过程中,过了几天再启动虚拟机,启动hadoop后再启动别的框架会报错: Exception in thread "main" java.lang.RuntimeExcepti ...

  7. ABC245Ex题解

    前言 \(2024.11.21\) 联考第三题,本人由于太菜没有推出 \(m=p^x\) 的性质遂部分分跑路,作文以记之. 简要题意 对于一个长度为 \(n\),值域为 \([0,m-1]\) 的序列 ...

  8. HTTP协议与RESTful API实战手册(终章):构建企业级API的九大秘籍 🔐

    title: HTTP协议与RESTful API实战手册(终章):构建企业级API的九大秘籍 date: 2025/2/28 updated: 2025/2/28 author: cmdragon ...

  9. Qt个人项目总结 —— MySQL数据库查询与断言

    3.Qt项目总结--数据库查询断言问题 问题: 当我使用MySQL数据库的查询操作时, 如果查询的数据在数据库中不存在,那么Qt会直接被干崩溃 但是?为什么呢?不应该是返回if语句中的结果吗,为什么会 ...

  10. wxpython SetValue 获取列表数据获取不到

    self.m_textCtrl4.SetValue(files) 同样的方法获取其他值就获取到了 ,后来想了想files是列表数据,于是将类型变为str型成功 self.m_textCtrl4.Set ...