Excel宏可以通过自动化经常使用的Excel过程来节省大量的时间。但是宏实际上是非常有限的。录音工具很容易出错,录音过程也很尴尬。
使用VBA来创建宏给了您更多的功能。您可以确切地告诉Excel要做什么以及如何做。您还可以访问更多的功能和能力。如果您经常使用Excel,那么学习如何创建VBA宏是值得的。
我们从基本知识开始。
VBA是visualbasicforapplicati***,一种可以在许多微软应用程序中使用的编程语言。visualbasic是一种编程语言,VBA是它的特定于应用程序的版本。(微软早在2008年就停止了visualbasic,但VBA仍然很强大)。
幸运的是,对于非程序员来说,VBA非常简单,您用来编辑它的接口提供了很多帮助。您将使用弹出式建议和自动完成的许多命令,帮助您快速地运行脚本。
不过,VBA需要一段时间才能适应。
如果VBA比录制宏更困难,为什么要使用它?简而言之,VBA宏的功能更强大。
您可以访问Excel的所有功能和功能,而不是在电子表格中单击并记录这些单击。你只需要知道如何使用它们。
一旦您对VBA更熟悉了,您就可以用更少的时间在常规宏中完成所有可能要做的事情。结果也将更加可预测,因为你告诉Excel要做什么。一点都不含糊。
一旦创建了VBA宏,就可以很容易地保存和共享它,以便其他人可以利用它。当您与许多需要在Excel中执行相同操作的人一起工作时,这一点尤其有用。
让我们看看一个简单的VBA宏,看看它是如何工作的。
让我们看一个简单的宏。我们的电子表格包含员工姓名、员工工作的商店编号以及他们的季度销售额。
此宏将添加每个商店的季度销售额,并将这些总额写入电子表格中的单元格(如果您不确定如何访问VBA对话框,请查看此处的VBA演练):
Sub StoreSales()Dim Sum1 As CurrencyDim Sum2 As CurrencyDim Sum3 As CurrencyDim Sum4 As CurrencyFor Each Cell In Range("C2:C51") Cell.Activate If IsEmpty(Cell) Then Exit For If ActiveCell.Offset(0, -1) = 1 Then Sum1 = Sum1 + Cell.Value ElseIf ActiveCell.Offset(0, -1) = 2 Then Sum2 = Sum2 + Cell.Value ElseIf ActiveCell.Offset(0, -1) = 3 Then Sum3 = Sum3 + Cell.Value ElseIf ActiveCell.Offset(0, -1) = 4 Then Sum4 = Sum4 + Cell.ValueEnd IfNext Cell Range("F2").Value = Sum1Range("F3").Value = Sum2Range("F4").Value = Sum3Range("F5").Value = Sum4 End Sub这看起来可能很长很复杂,但我们将对其进行分解,以便您可以看到各个元素并了解一些VBA的基础知识。
在模块的开头,我们有“Sub StoreSales()”。这定义了一个名为StoreSales的新子类。
您还可以定义函数——不同的是函数可以返回值,而sub不能(如果您熟悉其他编程语言,sub相当于方法)。在这种情况下,我们不需要返回值,所以我们使用sub。
在模块的末尾,我们有“end Sub”,它告诉Excel我们已经完成了这个VBA宏。
脚本中的第一行代码都以“Dim”开头。Dim是VBA用于声明变量的命令。
所以“Dim Sum1”创建了一个名为“Sum1”的新变量。但是,我们需要告诉Excel这是什么类型的变量。我们需要选择一种数据类型。VBA中有许多不同的数据类型--您可以在Microsoft的帮助文档中找到完整的列表。
因为我们的VBA宏要处理货币,所以我们使用的是货币数据类型。
语句“Dim Sum1 As Currency”告诉Excel创建一个名为Sum1的新货币变量。您声明的每个变量都需要有一个“As”语句来告诉Excel它的类型。
循环是在任何编程语言中都可以创建的最强大的东西。如果您不熟悉循环,请查看Do While循环的解释。在本例中,我们使用了For循环,本文也介绍了这一点。
循环如下:
For Each Cell in Range("C2:C51")[a bunch of stuff]Next Cell这告诉Excel遍历指定范围内的单元格。我们使用了Range对象,它是VBA中的一种特定类型的对象。当我们这样使用它时,Range(“C2:C51”)——它告诉Excel我们对这50个单元格感兴趣。
“对于每个单元格”都告诉Excel,我们将对范围内的每个单元格执行某些操作下一个单元格“完成我们想做的一切,并告诉Excel从一开始就开始循环(从下一个单元格开始)。
我们还有这样一句话:“如果IsEmpty(Cell),那么退出For。”
你能猜出它是干什么的吗?
注意:严格来说,使用While循环可能是更好的选择。但是,为了教学,我决定使用带有出口的for循环。
这个特殊宏的核心是If-Then-Else语句。下面是我们的条件语句序列:
If ActiveCell.Offset(0, -1) = 1 Then Sum1 = Sum1 + Cell.Value ElseIf ActiveCell.Offset(0, -1) = 2 Then Sum2 = Sum2 + Cell.Value ElseIf ActiveCell.Offset(0, -1) = 3 Then Sum3 = Sum3 + Cell.Value ElseIf ActiveCell.Offset(0, -1) = 4 Then Sum4 = Sum4 + Cell.ValueEnd If在很大程度上,你可以猜到这些语句的作用。你可能不熟悉活动单元格偏移“不过。”活动单元格偏移(0,-1)”告诉Excel查看活动单元格左侧一列的单元格。
在我们的例子中,这是告诉Excel查询storenumber列。如果Excel在该列中找到1,则会获取活动单元格的内容并将其添加到Sum1中。如果找到2,则将活动单元格的内容添加到Sum2中。等等。
Excel按顺序遍历所有这些语句。如果条件语句得到满足,则完成Then语句。如果没有,它将进入下一个ElseIf。如果它一直到最后,而且没有任何条件得到满足,它将不会采取任何行动。
循环和条件的组合驱动了这个宏。循环告诉Excel遍历所选内容中的每个单元格,条件告诉Excel如何处理该单元格。
最后,我们将计算结果写入单元格。下面是我们用来做的行:
Range("F2").Value = Sum1Range("F3").Value = Sum2Range("F4").Value = Sum3Range("F5").Value = Sum4使用“.Value”和等号,我们将这些单元格中的每个单元格设置为其中一个变量的值。
就这样!我们告诉Excel,我们已经用“结束子”编写了这个子子,VBA宏已经完成。
当我们使用“开发人员”选项卡中的“宏”按钮运行宏时,我们得到的结果是:
当您第一次看到上面的VBA宏时,它看起来相当复杂。但在将其分解为各个组成部分之后,逻辑就变得清晰了。像任何脚本语言一样,需要时间来习惯VBA的语法。
但通过练习,您将建立VBA词汇表,能够更快、更准确地编写宏,并且比录制宏的能力强得多。
当你陷入困境时,运行谷歌搜索是一种快速的方法,以得到你的VBA问题的答案。如果你愿意深入研究它以获得技术答案,微软的excelvba引用可能会很有帮助。
一旦您熟悉了基本知识,就可以开始使用VBA来处理诸如从Excel发送电子邮件、导出Outlook任务和显示PC信息之类的事情。
...创建专业的图表,到建立项目管理跟踪程序,但当涉及到编写报告时,Word是一个更好的工具。 ...
...行一个耗时的任务,这很方便。当您构建包含所有最常用宏的自定义工具栏时,它更为方便。 ...
...xcel先生的一个缺点是它没有Excel论坛那样好分类。因此,关于宏的文章和更一般的查询之间没有分离。但是,您可以通过搜索“macro”、“VBA”或其他类似的术语来轻松解决这个问题。 ...
...如果您希望从宏中获得更多信息,请查看我们的指南:VBA初学者编程和为宏构建工具栏。在Excel中为宏使用VBA会增加更多的功能! ...
...以在其计算机上填写的表单。不需要纸张。也许你想得到关于在工作场所开会的反馈。或者你可能想知道在你主持的活动中人们想要什么样的食物。 ...
... 对于初学者以及那些温习他们的微软办公应用程序技能的人来说,这里有一个值得一看的选项清单。 ...
...的区别,现在就可以将VBA脚本提升到下一个级别了。Dann关于在Excel中使用计数和添加函数的文章将允许您构建更高级的脚本,这些脚本可以非常快速地在所有数据集中累积值。 ...