社交媒体 当您的Excel宏变得越来越强大和复杂时,您可以使用10种方法来加速您的宏 - 傻瓜

当您的Excel宏变得越来越强大和复杂时,您可以使用10种方法来加速您的宏 - 傻瓜

目录:

Anonim

随着您的Excel宏越来越强大和复杂,您可能会发现它们失去了性能。讨论宏时,单词 performance 通常与 speed 是同义的。速度是VBA程序执行预定任务的速度。以下是帮助您保持Excel宏运行在最佳性能级别的十种方法。

停止工作表计算

<!您是否知道每次影响电子表格中任何公式的单元格被更改或操作时,Excel都会重新计算整个工作表?在具有大量公式的工作表中,此行为可能会显着减慢您的宏。

您可以使用应用程序。计算属性以告诉Excel切换到手动计算模式。当工作簿处于手动计算模式时,只有通过按F9键明确触发计算,工作簿才会重新计算。

<! - 2 - >

将Excel放入手动计算模式,运行您的代码,然后切换回自动计算模式。 Sub Macro1()应用程序。 Calculation = xlCalculationManual'将您的宏代码放在这里Application。 Calculation = xlCalculationAutomatic End Sub

将计算模式设置回xlCalculationAutomatic将自动触发重新计算工作表,因此在宏运行后不需要按F9键。


禁用表单屏幕更新

您可能会注意到,当您的宏运行时,屏幕会进行相当数量的闪烁。这种闪烁是Excel试图重画屏幕来显示工作表的当前状态。不幸的是,每次Excel重绘屏幕时,都会占用内存资源。

您可以使用应用程序。 ScreenUpdating属性禁用屏幕更新,直到您的宏完成。禁用屏幕更新可节省时间和资源,使您的宏运行速度更快一些。宏代码运行完毕后,您可以重新开启屏幕更新。 Sub Macro1()应用程序。 Calculation = xlCalculationManual应用程序。 ScreenUpdating = False'将您的宏代码放在这里Application。计算= xlCalculationAutomatic应用程序。 ScreenUpdating = True End Sub

将ScreenUpdating属性重新设置为True后,Excel将自动触发重画屏幕。

关闭状态栏更新

显示在Excel窗口底部的Excel状态栏通常显示Excel中某些操作的进度。如果您的宏正在处理大量数据,状态栏将占用一些资源。

请注意,关闭屏幕更新与关闭状态栏显示是分开的。即使禁用屏幕更新,状态栏也将继续更新。您可以使用该应用程序。 DisplayStatusBar属性暂时禁用任何状态栏更新,进一步提高您的宏的性能:

Sub Macro1()Application。 Calculation = xlCalculationManual应用程序。 ScreenUpdating = False应用程序。 DisplayStatusBar = False'把你的宏代码放在这里Application。计算= xlCalculationAutomatic应用程序。 ScreenUpdating =真正的应用程序。 DisplayStatusBar = True End Sub

告诉Excel忽略事件

您可以将宏实现为事件过程,告诉Excel在工作表或工作簿更改时运行某些代码。

有时,标准宏会做出会触发事件过程的更改。例如,如果您有一个标准的宏来处理Sheet1上的多个单元格,则每当该表单上的某个单元格发生更改时,您的宏必须在Worksheet_Change事件运行时暂停。

通过使用EnableEvents属性,您可以添加其他级别的性能提升,以便在您的宏运行时告诉Excel忽略事件。

在运行宏之前,将EnableEvents属性设置为False。宏代码运行完毕后,可以将EnableEvents属性设置为True。 Sub Macro1()应用程序。 Calculation = xlCalculationManual应用程序。 ScreenUpdating = False应用程序。 DisplayStatusBar = False应用程序。 EnableEvents = False'将您的宏代码放在这里Application。计算= xlCalculationAutomatic应用程序。 ScreenUpdating =真正的应用程序。 DisplayStatusBar =真正的应用程序。 EnableEvents = True End Sub

隐藏分页符

每次宏修改行数,修改列数或更改工作表的页面设置时,Excel都被迫花时间重新计算显示的分页符在工作表上。

您可以通过在启动宏之前隐藏分页符来避免这种行为。

将DisplayPageBreaks表属性设置为False以隐藏分页符。如果要在宏运行后继续显示分页符,请将DisplayPageBreaks表单属性重新设置为True。 Sub Macro1()应用程序。 Calculation = xlCalculationManual应用程序。 ScreenUpdating = False应用程序。 DisplayStatusBar = False应用程序。 EnableEvents = False Activesheet。 DisplayPageBreaks = False'把你的宏代码放在这里Application。计算= xlCalculationAutomatic应用程序。 ScreenUpdating =真正的应用程序。 DisplayStatusBar =真正的应用程序。 EnableEvents = True Activesheet。 DisplayPageBreaks = True End Sub

挂起数据透视表更新

如果您的宏操纵包含大型数据源的数据透视表,则在执行诸如动态添加或移动透视图字段之类的操作时,性能可能会变差。

通过暂停数据透视表的重新计算,直到完成所有透视图字段更改,可以提高宏的性能。只需设置数据透视表。 ManualUpdate属性为True推迟重新计算,运行您的宏代码,然后设置数据透视表。 ManualUpdate属性返回到False以触发重新计算。 Sub Macro1()ActiveSheet。数据透视表( “PivotTable1”)。 ManualUpdate = True'将您的宏代码放在ActiveSheet中。数据透视表( “PivotTable1”)。 ManualUpdate = False End Sub

转向清除复制和粘贴

重要的是要记住,虽然宏记录器通过为您编写VBA代码来节省时间,但并不总是编写最高效的代码。一个最好的例子就是宏录制器如何捕获录制过程中执行的任何复制和粘贴操作。

您可以通过剪切中间人,并从一个单元格直接复制到目标单元格,从而使您的宏得到轻微的提升。此替代代码使用目标参数绕过剪贴板并将单元格A1的内容直接复制到单元格B1。

范围( “A1”)。复制目的地:=范围(“B1”)

如果您只需要复制值(不是格式或公式),则可以通过避免使用复制方法来进一步提高性能。只需将目标单元格的值设置为在源单元格中找到的相同值即可。此方法比使用复制方法大约快25倍:

范围(“B1”)。值=范围(“A1”)。值

如果只需要将公式从一个单元格复制到另一个单元格(而不是值或格式),则可以将目标单元格的公式设置为包含在源单元格中的相同公式:

范围(“B1” )。公式=范围(“A1”)。公式

使用With语句

录制宏时,您经常会多次操作同一个对象。您可以使用With语句对一个给定对象执行多个操作,从而节省时间并提高性能。

以下示例中使用的With语句告诉Excel一次应用所有格式更改:

使用Range(“A1”)。字体。大胆=真实。斜体=真。下划线= xlUnderlineStyleSingle End With

将动作分成With语句的习惯不仅可以让宏运行得更快,而且还可以更轻松地读取宏代码。

避免选择方法

宏记录器喜欢使用Select方法在对它们执行操作之前显式选择对象。在使用它们之前通常不需要选择对象。实际上,您可以通过不使用Select方法来显着提高宏观性能。记录你的宏之后,习惯于改变生成的代码来删除Select方法。在这种情况下,优化的代码如下所示:

表(“Sheet1”)。范围( “A1”)。 FormulaR1C1 =“1000”表格(“Sheet2”)。范围( “A1”)。 FormulaR1C1 =“1000”表(“Sheet3”)。范围( “A1”)。 FormulaR1C1 =“1000”

请注意,没有任何内容正在被选中。代码只是使用对象层次来应用所需的操作。

限制工作表

另一种加速宏的方法是限制在代码中引用工作表数据的次数。从工作表中获取数据比从内存中获取数据效率低。也就是说,如果你的宏不需要重复地与工作表进行交互,那么你的宏将运行得更快。

例如,下面的简单代码强制VBA连续返回到表格(“Sheet1”)。范围(“A1”)获取在If语句中执行比较所需的数字:

对于ReportMonth = 1至12如果范围(“A1”)。 Value = ReportMonth Then MsgBox 1000000 / ReportMonth End If Next ReportMonth

更有效的方法是将值保存在表格(“Sheet1”)中。范围(“A1”)到一个名为MyMonth的变量。这样,代码将引用MyMonth变量而不是工作表:

Dim MyMonth as Integer MyMonth = Range(“A1”)。 Value ReportMonth = 1 To 12 If MyMonth = ReportMonth Then MsgBox 1000000 / ReportMonth End If Next ReportMonth

考虑利用变量来处理内存中的数据,而不是直接引用工作表。

当您的Excel宏变得越来越强大和复杂时,您可以使用10种方法来加速您的宏 - 傻瓜

编辑的选择

特权的基础知识在Oracle 12c - 虚拟机

特权的基础知识在Oracle 12c - 虚拟机

用户可以在Oracle 12c数据库中完成。您可能希望允许用户能够登录,但是您可能需要限制用户是否可以执行以下任一任务:访问某些数据开始...

Oracle 12c恢复管理器(RMAN)目录 - 傻瓜

Oracle 12c恢复管理器(RMAN)目录 - 傻瓜

的基础知识Oracle 12c恢复管理器(RMAN)环境,请考虑恢复目录。恢复目录是所有RMAN配置参数,备份操作和元数据的存储库。该目录可以无限期地存储备份信息。如何在Oracle 12c中选择目录模式RMAN提供了两种用于存储备份数据的选项:NOCATALOG ...

如何验证,查看和关闭Oracle 12c审计 - 傻瓜

如何验证,查看和关闭Oracle 12c审计 - 傻瓜

打开数据库中的审计记录,跟踪您制定的审计,以便您了解所做的事情。幸运的是,Oracle 12c在数据库中提供了一些视图来帮助您跟踪自己的操作:要验证您为审计配置的系统特权,请使用视图AUDIT_UNIFIED_POLICIES。要查看...

编辑的选择

何时按摩你的宝宝 - 假人

何时按摩你的宝宝 - 假人

你不需要花哨的设备,特殊的房间或大量的免费给宝宝一个很好的按摩时间。面对现实吧。妈妈是忙碌的人这里只是一些好的时候按摩你的宝宝的想法:按摩到你的日常工作:在你的宝宝午睡之前或之后给予按摩。 ...

成为一名保姆是什么?假人

成为一名保姆是什么?假人

是一个保姆是否是您正确的职业选择?也许你照顾你的弟弟姐妹,或者你总是被你的邻居叫到照顾,或者你只是热衷于与孩子们的工作。做一个保姆可能是你一个伟大的职业选择。信贷:©IStockphoto。 com / Piotr Marcinski What ...

编辑的选择

更改MYOB中的文本和日期 - 虚拟人物

更改MYOB中的文本和日期 - 虚拟人物

MYOB为您提供了许多快捷方式以帮助简化任务。例如,您可以像在任何文字处理器中那样在MYOB中复制和粘贴文本。以下是快捷方式:按键组合快捷键结果Ctrl-A选择所有高亮显示的文本Ctrl-C复制文本Ctrl-V粘贴文本Ctrl-X删除或剪切文本Ctrl-Z取消最后一位...

在Salesforce中创建视图。当您单击Salesforce中的某个选项卡以访问特定对象(例如“帐户”,“联系人”或“个案”)时,您可以在对象主页上找到自己的服务云 - 虚拟

在Salesforce中创建视图。当您单击Salesforce中的某个选项卡以访问特定对象(例如“帐户”,“联系人”或“个案”)时,您可以在对象主页上找到自己的服务云 - 虚拟

主页,如果你选择案例,如图所示)。案例主页。当您点击Salesforce中的一个选项卡以访问特定的对象(例如,帐户,联系人或个案)时,您可以看到一些较大的,勾勒出的最近案例,报告和矩形的矩形。