当前位置: 首页 > news >正文

为什么在激活 think-cell 时我的 Excel 宏速度缓慢?

导致 VBA 宏出现性能问题的一个常见问题是使用 .Select 函数。每次在 Excel 中选择单元格时,都会将此选择对象更改事件通知每个单一的 Excel 加载项(包括think-cell),这会大幅降低宏的速度。尤其是使用宏记录器创建的宏,更容易出现此类问题。
Microsoft 也建议在 VBA 代码中避免使用 .Select 语句,以提高性能。
示例:如何避免使用 .Select 语句
接下来看看以下的简单宏 AutoFillTable:
Sub AutoFillTable()
    Dim iRange As Excel.Range
    Set iRange = Application.InputBox(prompt:="Enter range", Type:=8)
    Dim nCount As Integer
    nCount = iRange.Cells.Count
    For i = 1 To nCount
        Selection.Copy
        If iRange.Cells.Item(i).Value = "" Then
            iRange.Cells.Item(i).Range("A1").Select
            ActiveSheet.Paste
        Else
            iRange.Cells.Item(i).Range("A1").Select
        End If
    Next
End Sub
此函数将打开输入框,该框会请求用户指定单元格范围。此函数会移动范围内的所有单元格。若发现非空的单元格,它会将单元格内容复制到剪贴板。该函数会将剪贴板内容粘贴到随后的每个空单元格。
AutoFillTable 使用剪贴板来复制单元格内容。因此,该函数需要选择所操作的每个单元格,以便 Excel 知道从哪个单元格进行复制以及应粘贴到哪个单元格。建议的解决方案显示在以下 AutoFillTable2 函数中:
Sub AutoFillTable2()
    Dim iRange As Excel.Range
    Set iRange = Application.InputBox(prompt:="Enter range", Type:=8)
    Dim iCellMaster As Excel.Range
    For Each iCell In iRange.Cells
        If iCell.Value = "" Then
            If Not iCellMaster Is Nothing Then
                iCellMaster.Copy (iCell)
            End If
        Else
            Set iCellMaster = iCell
        End If
    Next iCell
End Sub
AutoFillTable2 与以上函数在两个重要方面有所不同:
1.最重要的是,AutoFillTable2 不再需要选择单元格。相反,若发现某单元格非空,则会将该单元格存储在变量 iCellMaster 中。此后,若发现空单元格,则会将 iCellMaster 的所有内容复制到 iCell 中。
2.它使用 Visual Basic 语言特征 For Each … Next 来访问范围中的每个单元格。这已经改善了易读性。

相关文章:

  • ESP8266-Arduino网络编程实例-BME280传感器数据仪表显示
  • 使用VScode创建ipynb文件选择kernel运行python代码
  • API接口测试-postman批量执行测试用例及参数化
  • 【Linux集群教程】15 集群装机 - Cobbler 简介和搭建
  • C · 进阶 | 慎看!深剖文件操作,怕你停不下
  • 【JavaWeb】之MVC三层架构
  • 算法模型总结:二分查找
  • 基于遗传算法的二进制图像重建(Matlab代码实现)
  • opencv训练自己的模型,实现特定物体的识别
  • Long类型的数据,后端传给前端产生的精度丢失问题
  • 机器学习之神经网络的公式推导与python代码(手写+pytorch)实现
  • Spring | Spring整合Mybatis
  • 【学生管理系统】权限管理之角色管理
  • Uniapp零基础开发学习笔记(5) -组件入门及容器组件使用
  • HarmonyOS系统中内核实现烟雾检测的方法
  • 30天自制操作系统-2
  • ComponentOne 2017 V2版本正式发布
  • flutter的key在widget list的作用以及必要性
  • interface和setter,getter
  • Shell编程
  • 从零开始在ubuntu上搭建node开发环境
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 简单易用的leetcode开发测试工具(npm)
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • elasticsearch-head插件安装
  • MPAndroidChart 教程:Y轴 YAxis
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • $(function(){})与(function($){....})(jQuery)的区别
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (C)一些题4
  • (C语言)二分查找 超详细
  • (function(){})()的分步解析
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (顺序)容器的好伴侣 --- 容器适配器
  • (转)LINQ之路
  • (转)shell调试方法
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .net6 webapi log4net完整配置使用流程
  • .NET开发不可不知、不可不用的辅助类(一)
  • .NET微信公众号开发-2.0创建自定义菜单
  • .Net中的设计模式——Factory Method模式
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @Autowired多个相同类型bean装配问题
  • @ConditionalOnProperty注解使用说明