乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > excel宏-使用VBA编程Excel宏时可以避免的3个错误

excel宏-使用VBA编程Excel宏时可以避免的3个错误

作者:乔山办公网日期:

返回目录:excel表格制作

Microsoft Excel已经是一个非常强大的数据分析工具,但能够通过在(VBA)中编写简单代码来自动执行宏的重复任务,它的功能更强大。但是,如果使用不当,VBA会导致很多问题。


即使您不是程序员,VBA也提供简单的功能,允许您为电子表格添加一些非常令人印象深刻的功能,所以不要离开!


无论您是VBA大师, 谁在Excel中创建仪表板,或者只知道如何编写执行基本单元格计算的简单脚本的新手,您都可以遵循简单的编程技术,这将有助于您提高编写清洁和编写的几率。无错误的代码。


VBA入门


如果您以前没有在Excel中使用VBA进行编程,那么启用开发人员工具实际上非常简单。只需转到文件 > 选项,然后转到自定义功能区。只需将Developer命令组从左侧窗格移到右侧即可。


确保已启用该复选框,现在“开发人员”选项卡将显示在Excel菜单中。


此时进入代码编辑器窗口的最简单方法是单击Developer菜单中Controls下的View Code按钮。


1.可怕的变量名称


现在您已进入代码窗口,现在是时候开始编写VBA代码了。大多数程序中的第一个重要步骤,无论是VBA还是任何其他语言,都是定义变量。


在我几十年的代码编写过程中,在涉及变量命名约定时,我遇到了许多思想流派,并且很难学到一些东西。以下是创建变量名称的快速提示:


  • 让它们尽可能短。
  • 使它们尽可能具有描述性。
  • 用变量类型(布尔值,整数等等)作为前缀。
  • 请记住使用正确的范围。

这是一个程序的示例截图,我经常使用该程序从Excel中调用WMIC Windows 来收集PC信息。


当你想在模块或对象里面的任何函数里面使用变量时(我将在下面解释),那么你需要通过使用Public来声明声明来将它声明为“公共”变量。否则,通过使用单词Dim对它们进行前缀来声明变量。


如您所见,如果变量是整数,则以int开头。如果它是一个字符串,那么str。这有助于您在编程时使用,因为您只需通过浏览名称就可以知道变量所包含的数据类型。您还会注意到,如果存在类似于包含计算机名称的字符串,则该变量称为strComputerName。


避免制作只有您理解的非常复杂或令人困惑的变量名称。让其他程序员更容易来到你身后,了解这一切意味着什么!


人们犯的另一个错误是将工作表名称保留为默认的“Sheet1”,“Sheet2”等......这进一步增加了程序的混乱。相反,将表单命名为有意义。


这样,当您在Excel VBA代码中引用工作表名称时,您指的是一个有意义的名称。在上面的例子中,我有一张表格,我在其中输入网络信息,因此我将表格称为“网络”。现在在代码中,每当我想引用网络表时,我都可以快速完成,而无需查找它的表单号。


2.打破而不是循环


新程序员在开始编写代码时遇到的最常见问题之一是正确处理循环。因为使用Excel VBA的人很多都是代码新手,所以糟糕的循环是流行病。


循环在Excel中非常常见,因为通常是在整行或列中处理数据值,因此需要循环处理所有这些值。新程序员通常希望在特定条件为真时立即突破循环(For循环或While外观)。


您可以忽略上面代码的复杂性,只需注意在内部IF语句中,如果条件为真,则可以选择退出For循环。这是一个更简单的例子:


For x = 1 To 20 If x = 6 Then Exit For y = x + intRoomTemp Next i


新程序员采用这种方法因为它很容易。当一个条件发生时你正在等待退出循环时,立即跳出它的诱惑很强烈,但不要这样做。


通常情况下,在“中断”之后出现的代码对于处理很重要,即使是在退出之前的最后一次循环也是如此。一种更清洁,更专业的方法来处理你想要中途退出循环的条件,只是将该退出条件包含在类似于While语句的内容中。


While (x>=1 AND x<=20 AND x<>6) For x = 1 To 20 y = x + intRoomTemp Next i Wend


这允许代码的逻辑流程,最后一次运行时x为5,然后在For循环计数到6时正常退出。不需要在循环中包含笨拙的EXIT或BREAK命令。


3.不使用数组


新的VBA程序员犯的另一个有趣的错误是尝试处理在计算过程中向下过滤行和列的众多嵌套循环中的所有内容。


虽然这可以起作用,但如果您经常不得不对同一列中的相同数字执行相同的计算,它也可能导致严重的性能问题。循环遍历该列并每次提取值不仅编程繁琐,而且是处理器的杀手。处理长数字列表的更有效方法是使用数组。


如果您以前从未使用过阵列,请不要担心。想象一个阵列作为冰块托盘,带有一定数量的“立方体”,您可以将信息输入。立方体的编号为1到12,这就是您将数据“放入”它们的方式。


只需键入Dim arrMyArray(12)作为Integer,就可以轻松定义数组。


这样就形成了一个“托盘”,有12个可供您填充的插槽。


这是没有数组的行循环代码可能如下所示:


Sub Test1() Dim x As Integer intNumRows = Range("A2", Range("A2").End(xldown)).Rows.Count Range("A2").Select For x = 1 To intNumRows If Range("A" & str(x)).value < 100 then intTemp = (Range("A" & str(x)).value) * 32 - 100 End If ActiveCell.Offset(1, 0).Select Next End Sub


在此示例中,代码正在处理范围中的每个单元并执行温度计算。


稍后在程序中,如果您想对这些相同的值执行其他计算,则必须复制此代码,处理所有这些单元格,然后执行新计算。


现在,如果您改为使用数组,则可以将行中的12个值存储到方便的存储阵列中。然后,只要你想对这些数字运行计算,它们就已经在内存中并准备好了。


Sub Test1() Dim x As Integer intNumRows = Range("A2", Range("A2").End(xldown)).Rows.Count Range("A2").Select For x = 1 To intNumRows arrMyArray(x-1) = Range("A" & str(x)).value) ActiveCell.Offset(1, 0).Select Next End Sub


用于指向数组元素的“x-1”仅是必需的,因为For循环从1开始。数组元素需要从0开始。


但是,一旦你的数组都加载了行中的值,稍后在程序中你可以通过使用数组将所需的任何计算组合在一起。


Sub TempCalc() For x = 0 To UBound(arrMyArray) arrMyTemps(y) = arrMyArray(x) * 32 - 100 Next End Sub


此示例遍历整个行数组(UBound为您提供数组中的数据值),进行温度计算,然后将其放入另一个名为arrMyTemps的数组中。


您可以看到第二个计算代码有多简单。从这一点开始,只要您想对同一组数字执行更多计算,您的阵列就已经预先加载并准备就绪。


相关阅读

关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网