在excel 2010中所包含的图表类型共有

上次修改时间: 2009年12月11日

可以使用 VBA 完成的更多任务

  • 可以使用 VBA 完成的更多任务

Microsoft Excel 2010 是一个功能相当强大的工具,您可以使用它操作、分析和显示数据。不过有时候,尽管标准 Excel 用户界面 (UI) 中提供了丰富的功能集,但您可能仍想要找到一种更简便的方法来执行繁琐的重复任务,或执行某个 UI 似乎无法解决的任务。幸运的是,像 Excel 这样的 Office 应用程序提供了 Visual Basic for Applications (VBA)。这是一种编程语言,您可以通过它来扩展这些应用程序。

VBA 是通过运行宏(在 Visual Basic 中编写的分步过程)来工作的。学习编程可能看起来很困难,但只要多些耐心,多学习像本文中介绍的示例,许多用户会发现,甚至只需学会少量 VBA 代码,就会使工作变得更加简单,而且可以在 Office 中完成他们以前认为不可能做到的事情。一旦学会了一些 VBA,便可以更加轻松地掌握更多的 VBA,因此,这种可能性是无限的。

迄今为止,在 Excel 中使用 VBA 最常见的原因就是自动完成重复的工作。例如,假定您有好几十个工作簿,每个工作簿都包含好几十个工作表,这些工作表都需要进行更改。这些更改既可能很简单,例如对固定的单元格范围应用新格式;也可能很复杂,例如,查看每个工作表中的数据的统计特征,再选择最恰当的图表类型来显示数据和这些特征,然后创建图表并设置相应格式。

对于上述任一种情况,您都可能不愿意手动执行这些任务,最多也就愿意重复执行几次。您可以改为使用 VBA 来编写要 Excel 执行的显式指令,从而自动完成这些任务。

VBA 不仅仅可用于重复任务。您还可以使用 VBA 构建 Excel 的新功能(例如,您可以开发新算法来分析数据,然后使用 Excel 中的图表功能显示结果),也可以执行将 Excel 与其他 Office 应用程序(如 Microsoft Access 2010)集成的任务。事实上,在所有 Office 应用程序中,Excel 最常用作一个类似于常规开发平台的工具。除了所有涉及列表和会计的显而易见的任务之外,从数据可视化到软件原型制作的大量任务中,开发人员都可使用 Excel。

尽管有这么多原因要在 Excel 2010 中使用 VBA,但一定要记住,解决问题的最佳方案可能是根本就不涉及 VBA。即使没有 VBA,Excel 仍然提供了大量的功能,就连高级用户也不可能完全熟悉这些功能。在决定采用 VBA 解决方案之前,请全面搜索"帮助"和联机资源以确定没有更简单的方法。

通过代码使应用程序执行操作

您可能认为编写代码是一项神秘而又复杂的工作,但基本原则是使用日常推理,并且很容易掌握。Office 2010 应用程序的创建方式公开了一些名为对象 的内容,这些对象可以接收指令。通过向应用程序中的各种对象发送指令,可与应用程序进行交互。这些对象数量众多、类型各异而且使用灵活,但是它们也有局限性。这些对象只能执行为其设计的操作,并且只按照您的指令执行操作。

在应用程序的名为对象模型 的层次结构中,编程对象彼此之间有系统地相互关联。对象模型会大致反映您在用户界面中看见的内容;例如,Excel 对象模型包含 Application、Workbook、Sheet 和 Chart 对象以及其他很多对象。对象模型是应用程序及其功能的概念图。

可通过设置对象的属性 和调用对象的方法 来操作对象。设置属性可更改对象的某些性质。调用方法可使对象执行某个操作。例如,Workbook 对象具有一个用于关闭工作簿的 Close 方法和一个用于表示工作簿中当前活动的工作表的 ActiveSheet 属性。

许多对象有单复数之分,例如 Workbook 和 Workbooks;Worksheet 和 Worksheets,等等。对象的复数形式称作集合。集合对象用于对集合中的多个项执行一个操作。本文稍后将介绍如何使用 Worksheets 集合来更改工作簿中每个工作表的名称。

现在,您已对 Microsoft Excel 2010 如何公开其对象模型的方式有所了解,接下来可以尝试调用对象方法并设置对象属性。为此,您必须在一个位置以 Office 可以理解的方法编写代码;通常使用是 Visual Basic 编辑器。尽管默认情况下会安装该编辑器,但在功能区中启用该编辑器之前,许多用户都不知道该编辑器的存在。

所有 Office 2010 应用程序都使用功能区。功能区中有一个"开发工具"选项卡,在此可以访问 Visual Basic 编辑器和其他开发人员工具。由于 Office 2010 在默认情况下不显示"开发工具"选项卡,因此必须使用以下过程启用该选项卡:

启用"开发工具"选项卡

  1. 在"文件"选项卡上,选择"选项"打开"Excel 选项"对话框。

  2. 单击该对话框左侧的"自定义功能区"。

  3. 在该对话框左侧的"从下列位置选择命令"下,选择"常用命令"。

  4. 在该对话框右侧的"自定义功能区"下,选择"主选项卡",然后选中"开发工具"复选框。

在 Excel 显示"开发工具"选项卡之后,注意选项卡上"Visual Basic"、"宏"和"宏安全性"按钮的位置。

单击"宏安全性"按钮可以指定哪些宏可以运行并需满足哪些条件。尽管未授权宏代码可能会严重损害计算机,但阻止您运行有帮助的宏的安全条件会严重妨碍您的工作效率。宏安全性是一个复杂而又涉及广泛的话题,您应研究并了解是否应使用 Excel 宏。

在本文中,请注意,如果当您打开一个包含宏的工作簿时,在功能区和工作表之间出现"安全警告: 宏已被禁用"条,则可单击"启用内容"按钮来启用宏。

此外,作为一种安全措施,您不能以默认的 Excel 文件格式 (.xlsx) 保存宏;而必须将宏保存在具有一个特殊扩展名 .xlsm 的文件中。

以下过程演示如何创建一个储存宏的新的空白工作簿。然后,可以按 .xlsm 格式保存该工作簿。

创建一个新的空白工作簿

  1. 单击"开发工具"选项卡上的"宏"按钮。

  2. 在随后出现的"宏"对话框中,在"宏名称"下键入 Hello。

  3. 单击"创建"按钮打开 Visual Basic 编辑器,其中包含已键入的新宏的大纲。

VBA 是一种功能齐全的编程语言,并具有一个相应的功能齐全的编程环境。本文只介绍那些您刚开始编程所使用的工具,而不介绍 Visual Basic 编辑器中的大部分工具。出于这个原因,请关闭 Visual Basic 编辑器左侧的"属性"窗口,并忽略在代码上方显示的两个下拉列表。

现在,请编辑宏,使其类似于以下代码。

返回到 Excel 中的"开发工具"选项卡,再次单击"宏"按钮。

在随后出现的列表中选择"Hello"宏,然后单击"运行"显示包含文本"Hello, world!"的小型消息框。

您刚才在 Excel 中创建并实现了自定义 VBA 代码。在消息框中单击"确定"关闭消息框并完成宏的运行。

如果未出现消息框,请检查宏安全性设置并重新启动 Excel。

还可以从"视图"选项卡访问"宏"对话框。但是,如果您频繁使用某个宏,则使用一个快捷方式或"快速访问工具栏"按钮来访问它可能会更方便。

若要在"快速访问工具栏"中为"Hello"宏创建一个按钮,请使用以下过程。

以下过程描述了如何在"快速访问工具栏"上为宏创建按钮:

在"快速访问工具栏"中为宏创建按钮

  1. 单击"选项"打开"Excel 选项"对话框,然后单击"快速访问工具栏"。

  2. 在"从下列位置选择命令:"下的列表中,选择"宏"。在随后出现的列表中查找类似于"Book1!Hello"的文本,并选择该文本。

  3. 单击"添加 >>"按钮将宏添加到右侧的列表中,然后单击"修改…"按钮选择与该宏关联的按钮图像。

  4. 单击"确定"。现在,您应在"快速访问工具栏"中的"文件"选项卡上方看到新按钮。

现在,您不必使用"开发工具"选项卡,便可随时快速运行宏,赶快试试吧。

假定您有一个工作簿,其中的大量工作表上都包含列表,您需要更改每个工作表的名称,以与工作表上的列表标题相匹配。并不是每个工作表上都包含列表,但是如果包含列表,则标题在单元格 B1 中,如果不包含列表,则单元格 B1 为空白。不包含列表的工作表名称应原样保留。

通常,这可能是一个涉及以下操作的很复杂的任务:查看每一个工作表是否包含列表,如果包含列表,则复制列表名称,单击工作表标签,然后贴入新名称。可使用 Excel VBA 自动重新命名工作表,而不必手动执行所有上述步骤。

若要解决 VBA 编程问题,首先必须搞清楚代码将操作哪些对象。可用来研究此信息的一个基本工具是 ,它是 Microsoft Developer Network (MSDN) 上的

第一步是搞清楚如何操作您完成任务需要使用的特定对象;例如,工作表、工作表名称、单元格和单元格内容。在 Excel 中,至少有两种方法可以解决此问题:

  • 直接查看对象模型参考。

  • 录制一些您需要自动执行的操作,查看已录制的代码是如何操作对象的,然后查看对象模型参考以获取更多信息。

根据首选方法的不同,选项也不同,但是现在,首先请尝试使用录制宏。

有时,一个简单的录制宏就可以满足您的全部需要;在这种情况下,您甚至不必查看代码。更为常见的情况是,只录制是不够的,它只是后续过程的一个起点。

将录制宏用作解决方案的起点

  1. 录制您需要编码的操作。

  2. 查看代码,并找到执行这些操作的行。

  3. 添加录制宏无法录制的变量、控制结构和其他代码。

通过录制一个将工作表重新命名为 New Name 的宏来开始研究代码。然后可使用录制的宏开发您自己的宏,使它可以基于工作表的内容重新命名多个工作表。

录制可重命名工作表的宏

  1. 在"开发工具"选项卡上,单击"录制宏"。

  2. 转到"开发工具"或"视图"选项卡,单击"宏"按钮,选择"编辑"以打开 Visual Basic 编辑器。

Sub 行后面的前四行为注释。任何以撇号开始的行均为注释,对宏执行的操作没有任何影响。注释的主要作用是:

  • 使代码更加便于理解,不仅方便您,而且还方便其他以后可能需要修改此代码的任何人。

  • 暂时禁用代码行(称作将代码注释掉)。

此录制的宏中的四个注释没有起到上述的任何一个作用,因此删除它们。

接下来的行使用 Select 方法选择 Sheets 集合对象的 Sheet1 成员。在 VBA 代码中,在操作对象之前通常并不需要选择对象,即使录制宏执行了此操作,也同样如此。换句话说,此行代码是多余的,因此也可删除它。

录制的宏的最后一行修改 Sheets 集合的 Sheet1 成员的 Name 属性。这是要保留的行。

在经过更改后,现在录制的代码看起来应像下面这样。

现在来研究录制宏使用的 Sheets 集合。对象模型参考中的"工作表"主题包括类似下面这样的文本。

"Sheets 集合可能包含 Chart 或 Worksheet 对象。如果您需要使用只包含一种类型的工作表,请查看该工作表类型的对象主题。"

您现在只使用 Worksheets,因此将代码更改为下面这样。

此时的代码有一个限制,即,它只能对一个工作表进行更改。您可以为需要重命名的每个工作表添加对应的行,但是,如果您不知道有多少个这样的工作表,或者不知道这些工作表的当前名称是什么,怎么办?您需要一种方法对工作簿中的每一个 工作表应用某个规则。

VBA 具有一个理想的称为"For Each"循环的构造。For Each 循环可检查集合对象(例如 Worksheets)中的每一项,还可用于对这些项中的部分或全部执行一个操作(如更改名称)。

Each...Next Statements"(使用 For Each...Next 语句)。请注意,VBA 语言参考与对象模型参考一样,可以让您做到事半功倍,这是一个当您使用代码遇到困难时寻找解决方法的好地方。

myWorksheet 是一个变量;也就是说,它表示的内容会发生变化。在这种情况下,myWorksheet 变量相继表示 Worksheets 集合中的每一个工作表。您不一定要使用 myWorksheet;可以使用"x"、"ws"、"WorksheetToRenameAfterTheContentsOfCellB1"或者您想要使用的几乎任何名称(具有一些限制)。一个很好的准则就是,使用的变量名称的长度足以提醒您变量代表的内容,但也不要太长以致造成代码混乱不堪。

如果此时运行该宏,它会发生错误,因为 Excel 要求工作簿中的每一个工作表具有唯一名称,但下一行代码指示 Excel 为每个工作表赋予相同的名称。

若要更正此行以便您可以确认 For Each 循环能正常运行,应将此行做如下更改。

此行会将每个工作表的当前名称 (myWorksheet.Name) 更改为在当前名称后面追加"-changed",而不是尝试为每个工作表赋予相同的名称。

现在,该宏正在接近于实际解决手头的问题。现在您需要一种方法来从工作表本身获取信息,具体而言,就是从每个工作表的 B1 单元格获取信息,然后将获取信息放入到工作表名称中。

这一次,不再使用录制宏来搞清楚如何引用某个单元格,猜猜看,使用 Cell 对象是否可行。这个想法很好,不过,如果您打开对象模型参考并搜索 Cell 对象,就会发现根本没有 Cell 对象!但是有一个 。

CellFormat 对象主题在第一个代码示例中包括下面的代码。

此代码表明,您使用 Range 指定单元格区域或仅指定一个单元格。同样,您不需要 .Select 部分,但需要搞清楚如何引用 Range 对象的内容(与 Range 对象本身相对)。如果您查看 Range 对象主题,则会了解到 Range 同时具有 Methods 和 Properties。Range 的内容是一个事物,而不是一个操作,因此,它很可能是一个 Property。如果向下翻看列表,则会看到 Value 属性。因此,请尝试以下代码。

如果您对包含 B1 为空的工作表的工作簿运行此代码,则会发生错误,因为空的 Range 具有一个 "" 值(一个空文本字符串),这不是合法的工作表名称。现在差不多该创建一些示例数据了。在工作簿中创建三个与下图类似的工作表,然后运行该宏。

工作表名称应会相应地进行更改。

如上文所述,工作簿中任何 B1 单元格为空,则该宏会失败。不用手动检查每个工作表,可对该宏进行编码来执行此操作。在 myWorksheet.Name 行之前添加下面的代码行。

这称作"If…Then"语句。If…Then 语句指示 Excel:只要满足 If 行中的条件,就执行 If 行和 End If 行之间的行上的任何操作。此示例中,下面的行指定要满足的条件。

<> 表示"不等于",而中间没有任何内容的双引号表示一个空文本字符串;也就是说,无任何文本。因此,只有在 B1 单元格中的值不等于空(即,B1 单元格中有文本)时,才会执行 If 和 End If 之间的任何代码行。

有关 If…Then 语句的更多信息,请参阅 VBA 语言参考。(全称为"If…Then…Else 语句",其中 Else 是可选组件。)

应对该宏所做的另一个改进是在该宏的开头放置一个 myWorksheet 变量声明。

编辑器会对它确定您尝试要执行的操作做出响应,并提供适用选项的列表。您可以从列表中选择一个选项,或者继续键入。

尽管 VBA 中并不要求变量声明,但还是强烈推荐使用!通过变量声明,可以更容易地跟踪您的变量以及代码中的错误。此外需注意,如果您声明一个带有对象类型(如 Worksheet)的变量,而且您稍后在该宏中使用该对象变量,则 IntelliSense 会显示与该对象相关的属性和方法的适当列表。

现在该宏已经很复杂,可以包含一些注释来提醒您代码执行的操作。使用的注释数量部分地取决于个人风格,但通常而言,注释多比注释少好。随着时间的推移,通常需要修改和更新代码。如果没有注释,则可能很难理解代码的意图,尤其是在修改代码的人不是当初编写代码的人的情况下。为 If 条件和重命名工作表的行添加注释,得到的代码应如下所示。

为了测试该宏,将工作表重命名回 Sheet1、Sheet2 和 Sheet3,在一个或多个工作表中删除单元格 B1 的内容。运行该宏,验证它是否重命名单元格 B1 中有文本的工作表,并且保留其他工作表的名称不变。该宏适用于任何数量的、混合了已填充的 B1 单元格与空的 B1 单元格的工作表。

可以使用 VBA 完成的更多任务

本节介绍在 Excel 2010 中可以使用 VBA 完成的更多任务。本节中的示例旨在让您了解 VBA 的功能,而不是重点介绍特定的实际应用场景。您可能会发现,在演练这些示例时,在对象模型参考中查看每一步操作中的对象的信息会很有用。

乐于学习的态度的重要性

学习一般的编程(具体为 Excel VBA)的一个好方法就是采用一种策略,尝试新的内容,努力搞懂它,然后问自己一些问题,例如:

  • 接下来我可以尝试点什么?

  • 如果我想要使用 VBA,我首先要学习什么?

  • 有哪些我想知道的好玩或有趣的内容?

  • 我对哪些内容感到好奇?

强烈建议读者探索通向开启知识大门的道路。

Excel 中的一个常见任务是基于一个单元格区域创建图表。创建一个名为 AssortedTasks 的新宏,然后在 Visual Basic 编辑器中键入以下文本。

添加一行以创建图表对象,并将 myChart 变量分配给它。

括号中的数字决定图表的位置和大小。前两个数字是图表左上角的坐标,后面的两个数字是宽度和高度。

新建一个空的工作表,并运行该宏。该宏创建的图表中没有数据,因此没有用。删除您刚刚创建的图表,将以下几行添加到该宏的末尾。

这是 VBA 编程中的一个常用模式。首先,创建一个对象,将其分配给一个变量,然后使用 With…End With 构造来对该对象执行操作。示例代码指示图表使用当前选择内容作为其数据。(Selection 是 SetSourceData 方法的 Source 参数的值,而不是某个对象属性的值,因此,VBA 语法要求您使用冒号和等于号 (:=) 替代一个等于号 (=) 来赋值。)

在单元格 A1:A5 中键入一些数字,选择这些单元格,然后运行该宏。图表将按默认类型(条形图)显示。

如果您不喜欢条形图,则可以使用与下面类似的代码,将条形图更改为某种其他类型的图表。

xlPie 是内置常数(也称为"枚举常数")的一个示例。Excel 中有很多这样的常数,并且这些常数已经被详尽地记录下来。有关内置常数的更多信息,请参阅对象模型参考的"Enumerations"(枚举)部分。例如,图表类型的常数将会在"XlChartType Enumeration"(XlChartType 枚举)下列出。

您可以修改数据。例如,尝试将此行添加到变量声明的后面。

可以从用户获取输入,并使用该输入修改数据。

最后,将下面的行添加到该宏的末尾。

现在,完整的宏看起来应像下面这样。

验证单元格 A1:A5 是否仍然为选中状态,运行该宏,在输入框中键入一个数字,然后单击"确定"。此代码将保存并关闭工作簿。重新打开工作簿,并注意对饼图的更改。

前一节演示了如何使用一个简单的输入框获取用户的输入。除了显示信息的相应消息框之外,VBA 还提供了大量功能,以便您可以用来创建自定义对话框,对直接放置在工作表上的控件进行编码,或者操作 Excel 中内置的对话框。有关这些功能的更多信息,请参阅 Excel 2007 开发人员参考中的。

本节快速介绍一下用户窗体,至此便完成对 Excel VBA 的简单介绍。

在"开发工具"选项卡上,单击"Visual Basic"按钮以打开 Visual Basic 编辑器,然后转到"插入"菜单,选择"用户窗体"以打开"用户窗体设计视图"。

您将看见两个窗口。一个窗口表示您创建的用户窗体,另一个窗口就是"工具箱",其中显示您可以添加到用户窗体中的各种控件。例如,命令按钮、选项按钮、复选框等等。可将鼠标移动到"工具箱"控件的上方,查看它创建的是哪种控件。

创建一个非常简单的用户窗体,其中包含一个可运行本文前面所述的 Hello 宏的按钮。在"工具箱"中,按下 CommandButton 控件,然后将其拖动到用户窗体来创建一个命令按钮。右键单击该命令按钮,选择"查看代码"。

您看到的 Sub 是一个事件过程 的主干。在发生特定事件时将会运行事件过程。在此例中,正如 Sub 的名称所示,运行代码的事件为 CommandButton1 上的 Click。将下面一行添加到事件过程中。

现在 Visual Basic 编辑器应看起来像下面这样。

保存工作簿,转到"窗口"菜单,选择"UserForm1 (用户窗体)",以重新显示用户窗体。单击工具栏上的绿色箭头运行用户窗体。在对话框出现后,单击命令按钮以运行 Hello 宏,这将显示"Hello, world!"消息框。关闭该消息框以返回到正在运行的用户窗体,然后关闭正在运行的用户窗体以返回到"设计视图"。

您可能会发现,通过结合一些试验并仔细阅读对象模型参考和 VBA 语言参考,您可以从本文中获得足够的信息来帮助完成任何激励您开始学习 VBA 的任务。如果是这样的话,则太好了!如果不是这样,下一步最好是更多地大致了解 VBA。

学习更多有关 VBA 的知识的一种方法就是研究实用代码。除了对象模型参考和 VBA 语言参考中的示例之外,各种联机源中提供了大量的 Excel VBA 代码,包括 MSDN 上的文章、由专门研究 Excel 的 Microsoft 最有价值专家 (MVP) 维护的网站以及您可以通过快速 Web 搜索找到的其他内容。

这些资源中的代码可帮助您解决当前的编码问题,还可以帮助您为可能尚未考虑过的项目提供灵感。

如果您更愿意系统地学习 VBA,则可以阅读有关 VBA 的几本好书,网上有一些关于这几本书的不错的评论,可帮助您选择最适合自己的学习风格的书。

}

我要回帖

更多关于 excel数据筛选的功能是 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信