社交媒体 当您的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种方法来加速您的宏 - 傻瓜

编辑的选择

在QuickBooks Online中使用批发帐单 - 虚拟

在QuickBooks Online中使用批发帐单 - 虚拟

QuickBooks Online为会计专业人员提供免费程序。您可以注册批发价格计划,也可以免费使用QBOA。如果你选择这样做(这是一个不错的选择!),你将需要知道如何管理的事情。从您的批发帐单订阅中删除客户有时候,事情并不是这样...

基于零基础的预算与QuickBooks 2012 - 傻瓜

基于零基础的预算与QuickBooks 2012 - 傻瓜

零基预算是一个非常有用和常用的预算策略在使用QuickBooks 2012之前,您应该先了解一下。基于零的预算与顶级预算相反。零基预算从下到上工作。零基预算始于个人收入,费用,资产,负债和所有者权益账户。它检查一个特定的...

在Sage Timeslips中10个有用的键盘快捷键 - 虚拟键盘

在Sage Timeslips中10个有用的键盘快捷键 - 虚拟键盘

键盘快捷键可以是Sage Timeslips 。启动或保存一张单据,将昨天,今天或明天的日期插入日期字段,并用一个或两个按键打开和关闭定时器。以下是十大最爱。按下它做什么Ctrl + N开始一个新的投票,而工作在...

编辑的选择

可以在Photoshop Elements 11中的任意形状图层上绘制多个图形 - 虚拟模型

可以在Photoshop Elements 11中的任意形状图层上绘制多个图形 - 虚拟模型

Photoshop Elements 11中创建的任何形状图层上的图形。您可以按照与选择相同的方式添加,减去,排除重叠和相交形状。请遵循以下步骤:创建第一个形状后,在工具选项:添加到形状区域中选择一个状态按钮:...

使用读卡器将图像下载到Mac上 - 傻瓜

使用读卡器将图像下载到Mac上 - 傻瓜

您的相机可能有一个USB端口,电缆,您可以使用下载您的图像。这种方法使用相机电池电力,也相当缓慢。如果您使用读卡器,则会更快地将图像存入计算机。如果您下载了大量的图像,请考虑购买FireWire读卡器; ...

在Photoshop Elements 10中创建形状图层后,在Photoshop Elements 10中绘制多个图形 - 虚拟形状

在Photoshop Elements 10中创建形状图层后,在Photoshop Elements 10中绘制多个图形 - 虚拟形状

可以在该图层上绘制其他形状。您可以按照与选择相同的方式添加,减去,重叠和相交形状。请记住,当您在元素中创建一个形状时,您正在创建一个基于矢量的元素。向量在数学上描述形状。 ...

编辑的选择

在您的IOS应用程序中添加模态视图 - 在iPhone和iPad上虚拟视图

在您的IOS应用程序中添加模态视图 - 在iPhone和iPad上虚拟视图

对于那些希望用户(或用户想要)在应用程序流之外执行某些操作的情况非常适用。而不是使用带有后退按钮的导航控制器,而是显示一个模式视图,其中的控件允许用户选择一个动作或...

Android应用程序开发:你的Twitter应用程序的文件 - 傻瓜

Android应用程序开发:你的Twitter应用程序的文件 - 傻瓜

,这个Android Studio项目包含大约100个文件和大约170个不同的文件夹。要制作Android Twitter应用程序,您需要专注于该项目的MainActivity。 java文件。但其他一些文件需要注意。 Twitter4J API jar文件Android没有内置的通信支持...