Excel2007VBA参考大全(修订版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-27 07:44:11

点击下载

作者:[美]JohnGreen StephenBullen RobBovey MichaelAlexander(著)

出版社:信息技术第一出版分社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Excel2007VBA参考大全(修订版)

Excel2007VBA参考大全(修订版)试读:

前言

、第 1章、第 10章、第 12~14章、第 16~18章、附录 A由范进勇(fanjy)翻译,第2~6章、第9章由潘毅(Aeolian-Vox)翻译,第11章、第15章、第20~21章、第23章由杨荣林(烟雨厦江南)翻译,第7~8章、第19章、第22章、第24~27章、附录 B、附录 C由杨志林(northwolves)翻译。全书由范进勇统稿、校对和审核,郗金甲、杨涛也参与了本书的审校工作。最后还要感谢Excel Home管理团队,特别是朱尔轩、林树珊、周元平、顾斌等多位版主对我们工作的大力支持!2009年1月前言

Excel于1985年在Macintosh上初次登场,此后,在Mac环境中它从未失去作为最流行制表应用程序的地位。1987年,Excel登录PC,在Windows系统上运行,并花了多年时间超越了当时在计算历史中最成功的软件系统之一——Lotus 1-2-3。

在1981年IBM PC问世之前,有许多成功的制表应用程序,其中有VisiCalc和Multiplan。最开始是VisiCalc,但它很早就失败了。Multiplan是Microsoft Excel的前身,使用R1C1单元格地址,在现行版本的Excel中仍然可以在选项中选择使用该方式。1982年,Lotus 1-2-3发布,之后不久它就占据了PC电子表格市场的主导地位。

早期的电子表格宏

Lotus 1-2-3是第一个在一个程序包中提供表格、图表和数据库功能的制表应用程序。然而,它的辉煌的成就却主要归功于其宏功能。据说,Lotus 1-2-3的开发者创建宏是将其作为产品的调试和测试机制,他们是在最后时刻才认识到宏的潜力,最终版本中添加的宏功能,在最初开发计划中并不存在。

无论起源如何,宏为非程序员编程及自动制表提供了简便有效的帮助。宏抓住了机遇,起跑,并最终在计算机世界里获得成功。

最早的Lotus 1-2-3宏通过执行与用户用于完成相同任务所操作的相同按键来完成任务,因此,创建宏非常简单,从正常的制表操作到编程操作,基本没有新内容需要学习。所需要做的只是记住该按什么键,以及记录下它们。唯一与传统编程相似的是8个额外的命令——/x命令。/x命令提供了一些简单的判断和分支功能、一种获取用户输入的方法以及一种构造菜单的方法。

脆弱性是Lotus 1-2-3宏的一个主要问题。当时,还没有带多个工作表的工作簿,宏必须直接编写到它们所支持的表格的单元格中,与输入数据和运算保持一致。宏完全受用户支配,例如,当用户插入或者删除行或列时可能会无意中破坏宏。宏也完全取决于编程者的能力。一个糟糕的宏甚至会在编辑表格数据时轻而易举地“自杀”。

尽管存在问题,用户仍着迷于宏所带来的编程能力,无数行代码是用这种隐藏的语言写成的,用户用匪夷所思的技术回避着宏的诸多局限。人们越来越依赖宏,那些经常设计得很糟糕、注解甚少、极为脆弱的代码,却经常支撑着企业关键的控制系统。

XLM宏语言

最初的Excel宏语言需要在宏工作表中编写宏代码,并将该工作表保存为带有.xlm扩展名的文件。采用这种方式,宏与扩展名是.xls的工作表得以区分开来。现在,经常称这些宏为XLM宏或者Excel 4宏,以区别于Excel 5中引入的VBA宏语言。

XLM宏语言由保存在宏工作表列中的函数调用组成。几百个必要的函数提供了Excel所有的功能,并允许编程控制。XLM宏语言比Lotus 1-2-3宏语言更复杂和强大,甚至支持由Lotus 1-2-3增强版本2和3创建的电子表格的功能。然而,其所产生的代码不太容易理解。

Excel宏语言的复杂性是柄双刃剑。它要求用户具有较高的编程能力,能够开发语言的功能,但这对大多数用户却是一个障碍。在人工操作 Excel 和编程操作的方式之间没有简单的联系,并且在掌握XLM宏语言时会有一条非常不合理的学习曲线。

在PC上接受Excel的另一个障碍是需要Windows操作环境。早期的Windows版本由于限定使用内存而受到限制,运行Windows也需要比DOS更多的功率。此外,还要求图形化的用户界面,因此,权衡硬件的成本和操作系统的速度成为了问题。

Lotus错误地认为Windows只是“昙花一现”,不久将会被OS/2所取代,因此懒得花费时间设计1-2-3的Windows版本。Lotus将其精力投入到1-2-3/G上,这是1-2-3的一个非常漂亮的GUI版本,仅能在OS/2中运行。它的孤注一掷失败了。

Windows的蒸蒸日上既成事实,Lotus真正陷入了困境,用户大量转向Excel。1991年,Lotus作出了首度尝试,发布了一个1-2-3的Windows版本,实际上是在DOS简化的GUI架构中的1-2-3版本3。该版本成功的发布拉近了 1-2-3 和 Excel 之间的差距,但此时要阻止几乎已经全面适应市场的Microsoft Office已为时过晚。

Excel 5

Microsoft做出了一个大胆的决定,通过引入VBA(Visual Basic for Application)作为Office中通用的宏语言来统一Office应用程序后台的程序代码。发布于1993年的Excel 5是第一个包含了VBA的应用程序。在后来发布的Office版本中,VBA被逐步引入其他的Office应用程序内。在Office家族中,Excel、Word、Access、PowerPoint和Outlook都使用VBA作为它们的宏语言。

自从Excel 5发布后,Excel同时支持XLM和VBA宏语言,前者在一定时间内仍可用,但其重要性已降低,以便用户转向VBA。

VBA是一种面向对象的程序设计语言,与Visual Basic程序设计语言在结构化和处理对象方面相同。一旦学会了在Excel中使用VBA,在其他的Office应用程序中也能够使用它。

Office中不同的应用程序对VBA公开的对象也不同。在不同的应用程序中编程,需要熟悉其对象模型(object model)。对象模型是可以在应用程序中找到的所有对象的层次结构。例如,Excel对象模型部分,有一个 Application 对象,Application 对象包含 Workbook 对象,而 Workbook 对象包含Worksheet对象,Worksheet对象又包含Range对象。

VBA比XLM宏语言更容易学习,功能也更强大,通常效率更高,可以编写结构良好的代码。也会写出一些结构糟糕的代码,但如果遵循几条原则,就应该能够写出易于理解和比较容易维护的代码。

在Excel 5中,VBA代码在模块里编写,而模块是工作簿中的工作表(Sheet)。工作表(Worksheet)、图表工作表和对话框工作表是可以包含在Excel 5工作簿中的其他类型的工作表。

模块事实上只是一个带有一些特定特性的字处理文档,可用于帮助编写和测试代码。

Excel 97

在Excel 97中,Microsoft在VBA界面中引入了一些显著的变化,同时也对Excel对象模型做出了一些改变。从Excel 97开始,模块在Excel应用程序窗口中不再可见,也不再是包含在工作簿对象中的对象。模块包含在与工作簿相关联的VBA方案内,只能在Visual Basic编辑器(VBE)窗口中查看和编辑。

除了标准模块外,类模块也被引入,允许用户创建自定义对象并访问应用程序事件。同时,代替菜单和工具栏的命令栏(CommandBars)出现,用户窗体取代了对话框工作表。与模块一样,用户窗体也只能在VBE窗口中编辑。照例,那些被取代的功能仍可在Excel内使用,但只以隐藏身份出现,帮助系统内也未被提及。

在 Excel 的以前版本中,诸如按钮等嵌入在工作表中的对象仅能响应单一的事件,通常是 Click事件。Excel 97极大地增加了VBA代码能够响应的事件数量,并且通过为工作簿对象、工作表对象和图表工作表对象提供事件过程使这种方式正式化。例如,在Excel 2007中,工作簿能够响应29种事件,如BeforeSave、BeforePrint和BeforeClose。Excel 97也引入了可被嵌入工作表和用户窗体的ActiveX控件。ActiveX控件可以响应更大范围的事件,如GetFocus、MouseMove和DblClick。

与以前相比,VBE提供给用户更多有用的帮助。例如,输入代码时,将自动弹出显示该对象相应的方法和属性列表,以及函数和方法的变量和参数值。对象浏览器(Object Browser)更优于以前的版本,比如条目搜索功能和固有常量的综合信息提供。

Microsoft已经提供了一个扩展库,可以编写VBA代码操纵VBE环境和VBE工程。因此,可以编写能够直接访问代码模块和用户窗体的代码,例如,可以创建缩排模块代码或者将模块中的代码导出到文本文件中的应用程序。

Excel 2000

Excel 2000在VBA编程方面没有引入明显的变化,但在Office 2000和Excel 2000的用户界面中做了大量的改进,也极大地改进了 Excel 的一些功能,例如数据透视表,以及新的数据透视图功能。网络用户能从Excel 2000中获得更多的好处,特别是将工作簿保存为网页的功能。同时,通过新的在线协作功能,给需要共享信息的用户提供了更多便利。

VBA用户长期盼望的改进是引入了无模式的用户窗体。以前,Excel仅支持模式的对话框,即当模式的对话框出现在屏幕上时,如不关闭,则无法执行其他操作。无模式的对话框允许用户继续别的工作,而该对话框仍浮动在工作表之上。例如,在装载 Excel 中编写的应用程序时,无模式的对话框能用于显示一个临时屏幕,当一个长的宏运行时显示一个进度指示器。

Excel 2002

Excel 2002也引入了一些变化,这一次主要的改进同样是在用户界面而非其编程功能。Microsoft继续集中改进了与网络相关的功能,使其更容易通过Internet访问和分发数据。对VBA编程者有用的新功能包括一个新的Protection对象、SmartTags(智能标记)、RTD(实时数据)和对XML支持的改进。

Protection对象允许在保护工作表时让用户选择可以控制的功能。例如,能够决定用户是否可以排序、改变单元格格式或者插入和删除行和列。还有一个新的AllowEditRange对象,使用该对象指定可以编辑特定单元格区域的用户,以及是否必须使用密码来进行编辑单元格操作。用户可在不同的单元格区域应用不同的许可组合。

SmartTags使Excel能识别输入单元格中的含有特定意义的数据。例如,Excel 2002能够识别股票市场缩写,MSFT代表Microsoft Corporation。当你在Excel内输入类似项目时,将显示带有弹出菜单的SmartTag符号,能够使用该菜单获取相关的信息,例如这家公司最新的股票价格或摘要报告。Microsoft提供了一种工具,允许开发者创建新的SmartTag软件,使得数据在整个组织内或者在Internet中都可用。

RTD允许开发者创建用户能够提取的信息源。一旦与某个工作表建立了链接,原始数据的变化将自动被反映出来。其常见的用途是在交易过程中实时获取股价的变化。其他可能的应用是从科学仪器或者工业进度控制器中记录数据。改进对XML的支持意味着能够更容易创建通过Internet和局域网交换数据的应用程序。如今每个人都越来越依赖于这些疾速发展的技术,对XML的支持就越发重要。

Excel 2003

Excel 2003继续引入新的面向网络的功能,包括改进了对XML的支持、改进了在线帮助以及使用Windows SharePoint Services共享和更新数据的功能。

Excel 2003引入了许多Excel统计函数的修正版本。

列表功能的引入使数据库表的管理更加易行。列表简化了排序、筛选和编辑数据的工作。列表也可以整合进SharePoint,以实现经由Internet的数据共享。

通过新功能的引入,文档共享和访问权限的管理能力得到增强。新版本内还引入了并排比较工作簿的功能。

Excel 2007

在Excel 2007中,出现了自Excel 97以来Excel最大的一次改变。最大的影响是采用了新的用户界面,该用户界面使用功能区(Ribbon)代替菜单和工具栏作为主要的导航工具。虽然新用户可能会更容易理解功能区,但有经验的用户则需要重新学习。从开发者的角度看,功能区是主要的挑战,在应用程序接口方面需要全新的方式和编程规则。

Excel 2007解除了一些旧的限制,例如,支持1 048 576行和16 384列;在功能访问的方式上, Excel 2007做出了许多改变,数据透视表、图表及许多其他特色功能都更有亲和力,操作上也更简易。

Excel 2003中处理数据库表的列表功能在Excel 2007中称为表,表更容易使用并且功能更强大。排序和筛选功能被重新设计,例如可同时采用多达64个关键字进行排序。可访问的外部数据源范围也得到了增强,访问数据的方式也被改进。

在Excel 2007中使用了新的文件格式,这种格式不兼容以前版本的文件格式,虽然可以使用旧格式保存数据,但将失去许多新的功能。如果想要保存带有 VBA 代码的工作簿,文件格式将与标准的工作簿文件不同。

随着信任中心(Trust Center)的引入,安全概念被重新设计。现在,可将文件夹指定为“可信任的”,运行在这些文件夹中的宏将不再需要数字证书。

对VBA程序员来说,还有许多新的对象有待发掘;许多新的概念有待学习。

工具支持

本书的绝大部分内容都配有示例,必要处还提供了完整代码和大量截屏图示。用户所使用的Windows版本不太重要,但必须完全安装了Excel。在涉及Excel与其他Office应用程序相交互的进阶章节,还需要完全安装Office。请确保在安装时将可选的VBE和VBA帮助文件包括在内。

请注意,第18章需要安装VB6,因为该章介绍了COM加载项。第23章需要IIS 5.0、SQL Server 2000和SQL Server 2005,以便与OLAP数据源相交互。

阅读须知

本书使用了许多不同的文本样式和版面编排,以区别不同的信息。以下是一些样式及其对应的说明。

方框里的内容是与上下文直接相关的重要的、关键的细节,需要牢记。

此类样式提供背景信息、注解和参考。

在计算机屏幕上显示的词,例如菜单选项,使用双引号括起来,如“工具”菜单。

新的或重要的代码表示为:

SELECT CustomerID, ContactName, Phone

FROM Customers

以前已看到过的代码或与主题关系不大的代码呈现为:

SELECT ProductName FROM Products作者简介

John Green是一位生活和工作在澳大利亚悉尼的独立计算机顾问,精通Excel和Access。他有35年的计算机工作经验,拥有化学工程学位和MBA学位。

John用FORTRAN编写了其生平第一个程序,参与过大型机上专业设计语言的研发。20世纪80年代早期,他的兴趣转向电子表格系统,包括Lotus 1-2-3和Excel。

John为多家澳大利亚杂志撰写专栏,也参与专业书籍的编著,撰写了包括Excel Expert Solutions和Using Visual Basic for Application 5等许多书的部分章节。他还与Stephen Bullen和Rob Bovey合著了Professional Excel Development。

为表彰他对CompuServe Excel论坛讨论区和MS网络新闻组所做出的贡献,从1995年到2005年,他都被Microsoft授予MVP(最有价值专家)的称号。

John Green编写了本书的前言、第1章~第11章、第13章、第15章~第17章和第19章。

Stephen Bullen和他的妻子Clare、女儿Becky以及他们的爱犬Fluffy和Charlie居住在英国伦敦的Woodford Green。他与前妻还育有两个女儿Jane和Katie。

毕业于牛津大学的Stephen拥有工程学、经济学和管理学的硕士学位,这是他特有的优势,使其能将商业和技术很好地融合在一起。自1994年起,他开始提供Excel咨询和应用程序开发服务,早先是Price Waterhouse Management Consultants的雇员,后来在BMS(Business Modelling Solution Limited,2004年更名为Office Automation Ltd.)名下提供独立的贸易咨询服务。目前Stephen供职于伦敦的Barclays Capital,为复杂的外来衍生性商品开发商贸系统。

Stephen是Excel VBA Programmer’s Reference早前版本的合著者,也是Professional Excel Development一书的合著者。

除了咨询和写作工作外,Stephen活跃于Microsoft公司的peer-to-peer(点对点,简称P2P)技术支持新闻组内的Excel用户社区,还花费了大量业余时间更新他的Excel博客。为酬谢他的知识、技术和贡献,Microsoft自1996年起每年都授予他MVP的头衔。

Stephen Bullen编写了本书的第14章、第18章、第24章~第27章和附录B。

Rob Bovey是Application Professionals的总裁,这家软件公司专门从事Microsoft Office、Visual Basic和SQL Server的应用程序开发。他运用多年的经验,为Application Professionals公司的企业用户创建财政、会计和执行信息系统。Rob为Microsoft Excel开发了几个由Microsoft发布的加载项,也曾参与撰写Microsoft Excel 97 Developers Kit和Professional Excel Development。他在罗彻斯特理工学院(Rochester Institute of Technology)获得理学学士学位,在北卡罗莱纳大学教堂山分校(the University of North Carolina at Chapel Hill)获得MBA学位。他是Microsoft认证系统工程师(MCSE)和Microsoft认证解决方案开发专家(MCSD)。自1995年起,Microsoft每年都授予他MVP的头衔。

Rob Bovey编写了本书的第20章~第22章。

Michael Alexander是Microsoft认证应用程序开发专家(MCAD),具有超过14年的咨询和开发办公解决方案的经验。他将VBA和VB方面的经验充分应用于私人部门成功的咨询实践中,为各行各业开发中间件和报表解决方案。目前他居住在得克萨斯州的Frisco市,在一家顶级技术公司内担任资深程序经理。Michael是多本有关Microsoft Access和Excel书籍的作者,在DataPig Technologies的幕后居功至伟,与Office社区的用户分享他的Access和Excel知识。

Michael Alexander编写了本书的第12章、第23章和附录A及附录C。致谢

John Green

感谢Katie Mohr和Michael Alexander让我们重新聚首,感谢Brian Herrmann将我们融合为一个协调一致的整体。

应该特别提到我们的技术编辑Dick Kusleika,他将我们从一些窘境中解救出来,并且在示例和文本方面提出了大量的改进建议。谢谢你,Dick。

感谢Michael Beale协助提供了一些关于与其他Office应用程序交互的示例。

最后,衷心地感谢我的合作伙伴。我负责编写基础方面的内容,而Michael、Rob和Stephen用高级的专业知识使我们走得更远,超出了我一人的能力所及。

Stephen Bullen

首先,也是最重要的,我想感谢我的女友Clare,在我写作本书的那些日子里,从黄昏到深夜,她都忍受着深深的孤独和寂寞。同时,感谢Mike Alexander和Katie Mohr,在他们的努力下,原来的作者团队重新运作起来,编写这本最新版本的书;也要感谢John和Rob的支持与参与,他们的职业精神让我敬佩。

Dick Kusleika是本书的无名英雄。当4个作者专注于自己的章节写作时,Dick必须仔细地阅读每个单词并且细心地审校。令人惊讶的高质量的工作成果应归功于他,如果书里还留下任何错误,都应是我们的责任。

当然,如果没有Microsoft的Excel团队,我们就没有任何写作的素材,因此,要感谢David Gainer和他的团队对一个相当成熟的产品作了令人惊叹的更新,并慷慨地与Excel MVP成员和广大用户公开分享。功能区(Ribbon)是多年来Office发生最大的变化所在,Jensen Harris和Savraj Dhanjal以及他们的团队分别在设计功能区的UI和可编程模型方面做了杰出的工作。我特别要感谢他们从试用版的测试者中听取了(有时是严厉的)批评,并且相应地更新了他们的设计。

最后,我要感谢购买了本书的读者,他们在Amazon上写下五星级的评论并将本书推荐给所有的朋友和同事!

Mike Alexander

我想首先感谢原来的作者John Green、Stephen Bullen和Rob Bovey,因为他们同意引用和改编他们的著作。他们在Excel的专业开发人员中受到极高的尊重,这是对他们卓越工作的回报。

非常感谢Katie Mohr邀请我一起游说、重组原来的写作团队。可以这样说,如果没有她的努力,本书就不会是今天这样一部极好的作品。我也要感谢Brain Herrmann和Wiley出版社的专家,他们花费了大量的时间和资源帮助这本大部头的作品最终完成。

Dick Kusleika肯定是本书的“第五个披头士”。为使我们坦诚以对,为确保我们的工作尽可能清晰, Dick投入了大量显而易见的时间和精力。这类综合性的参考书籍离不开一位值得信赖的技术编辑,Dick Kusleika名符其实。

特别感谢亲爱的Mary,她忍受了我所有疯狂的工作。第1章Excel VBA基础

本章主要为那些不熟悉Excel和Excel宏录制器或者缺乏使用Visual Basic语言编程经验的读者编写。如果你已经能够很轻松地操作Excel所提供的功能,或者已使用过宏录制器,或者具有Visual Basic和VBE的实际应用知识,则可以直接阅读第2章。

如果尚未掌握上述相关知识,那么本章提供的信息可以为你轻松地继续学习后续章节中所介绍的更多高级功能打下基础。具体地讲,本章介绍下列主题:

◆ Excel宏录制器;

◆ 用户自定义函数;

◆ Excel对象模型;

◆ VBA编程概念。

Excel VBA是一款编程应用程序,允许使用Visual Basic代码运行Excel软件包的许多功能,因此,允许定制Excel应用程序。一组VBA代码经常被称为“宏”(macro)。本章将介绍很多正式的术语,但是将继续使用术语宏(macro)作为代表任何VBA代码的一般方式。

在日常使用Excel时,如果重复地执行相同顺序的命令,那么使用宏来自动控制这些步骤可以节省大量的时间并提高效率。如果为不熟悉Excel的用户建立了应用程序,则可以使用宏创建按钮和对话框,引导用户使用该应用程序,同时自动操作所涉及的过程。

如果能够手动执行某项操作,则可以使用宏录制器来捕获该操作,这是非常快速且容易的过程,不需要事先了解VBA语言知识。许多Excel用户在录制并运行宏的时候感到不需要学习VBA也可以完成这些工作。

然而,录制的代码可能不够灵活,仅能用于执行某特定单元格范围中一项特定的任务。此外,录制的宏可能比具备 VBA 知识的用户编写的代码运行得更慢。为了创建可以适应变化的交互式宏,并使宏能快速运行,以及利用Excel更高级的功能(例如定制对话框),则需要学习VBA。

宏录制器并非可有可无,它是VBA程序员可以利用的最有价值的工具之一,是产生可运行的VBA代码的最快方法,但是必须准备应用自己的VBA知识来编辑所录制的宏,以获得灵活而有效率的代码。本书中多次出现的情况是先录制一个Excel宏,然后演示如何改编所录制的代码。

本章中将介绍如何使用宏录制器,阐述Excel提供的运行宏的所有方法,讲解如何使用Visual Basic编辑器(VBE)来检查和修改宏,从而突破宏录制器的限制并初识VBA语言和Excel对象模型的能力。

使用VBA也可创建工作表函数。Excel提供了数百个可用于单元格公式中的内置函数,例如SUM函数和IF函数。但是,当需要一个经常使用但并未包含在标准的Excel函数中的复杂计算时,例如税金计算或专门的科学公式,用户就可以编写自己的用户自定义函数。1.1 使用宏录制器

操作 Excel 的宏录制器的过程很像用电话答录机录制应答语。首先想好你要说什么并稍加演练,然后打开录音机,说出你的应答辞。录制结束后,关掉录音机。这样就录好了一份应答语,在电话无人应答时被自动播放。

录制 Excel 宏的过程非常相似。首先排练好要涉及的步骤,并确定想要开始和停止录制过程的位置。然后准备一个电子表格,开启宏录制器,执行 Excel 操作,结束时关闭宏录制器。这样就生成了一个自动化的过程,任何人在按下按钮时都可以重复执行它。1.1.1 录制宏

假设使用宏在工作表顶部从单元格B1 开始输入前6个月的名称,即一月~六月。这个宏所实现的结果虽然可以简单地使用自动填充操作来完成,但本示例主要用于介绍一些重要的常规概念。

◆ 首先,考虑如何执行这项操作。本示例相当简单,只需在工作表中输入数据。记住,准备录制更复杂的宏之前,需要预先演练将要执行的操作。

◆ 然后,考虑何时开始录制。本示例中,因为要在单元格B1中放置“一月”,所以录制时应该包括选择单元格B1的操作。如果开始时不选择B1,将会有在活动单元格中输入“一月”的记录。而在执行宏时,这个单元格的位置是不固定的。

◆ 接下来,考虑何时停止录制。如果想将单元格设置为某些样式,如粗体和斜体,也应被包括在录制过程中。在宏运行后希望将活动单元格放置在哪里?你希望活动单元格就是输入“六月”的单元格吗?或者希望将活动单元格放置在列A或列B,以便为下次输入做准备?假设在宏结束时活动单元格为单元格A2,则应在关闭宏录制器前选择A2。

◆ 现在,可以打开屏幕,准备录制了。

本示例中,打开一个已选择了单元格 A1 的空工作表。如果没有在功能区中看到“开发工具”选项卡,则需要单击位于Excel窗口左上角的Microsoft Office按钮(如图1-1所示),然后单击对话框底部的“Excel选项”,选择“常用”,选取“在功能区显示开发工具选项卡”前的复选框,单击“确定”。现在,可以选择功能区的“开发工具”,单击“录制宏”显示“录制新宏”对话框,如图1-1所示。

在“宏名”文本框中,输入宏的名称代替默认的名称,例如Macro1。宏名应该以字母开始,并且仅能包含字母、数字和下划线,长度不能超过255个字符;不能包含特殊字符,例如惊叹号(!)或问号(?);也不能包含空格;最好使用简短且易于识别的描述性名称。可以使用下划线来分隔单词,也可以将首字母大写从而很容易地区分单词。图1-1

将该宏命名为MonthNames1,因为稍后将创建该宏的另一个版本。

在“快捷键”文本框中,可以输入单个字母,然后通过按下Ctrl键的同时按下该字母键来运行宏,例如,使用小写字母 m;也可以使用大写字母 M。此时需要使用组合键来运行宏。当然,不一定要设置快捷键,也可以用其他方式运行宏,具体方法稍后将进行介绍。

在“说明”文本框中,可以添加文字作为宏的注释,该注释显示在宏代码的顶部。这对 VBA 来说无关紧要,但提供了与宏相关的信息。

所有的 Excel 宏都被存储在工作簿里,也可另外选择录制的宏的存储位置。在“保存在”组合框中列出了3个可能的位置。如果选择“新工作簿”,宏录制器将打开一个新的空工作簿以保存宏。“个人宏工作簿”代表一个特殊的隐藏工作簿,随后将对其进行介绍。选择“当前工作簿”将录制的宏存储在当前活动工作簿里。

填写好“录制新宏”对话框后,单击“确定”按钮。将看到一个新的“停止录制”按钮出现在屏幕底部状态栏的左侧,如图1-2所示。同时在功能区中,“停止录制”按钮代替了“录制宏”按钮。图1-2

单击单元格B1,输入“一月”,并填写其他单元格,如图1-2所示。然后,选择单元格区域B1:G1,并单击功能区中“开始”选项卡里的“加粗”和“倾斜”按钮。单击单元格A2,接着停止录制。可以单击功能区中的“停止录制”按钮或状态栏中的“停止录制”按钮以便停止录制。

千万不要忘记停止宏的录制。如果录制未结束便试图运行录制的宏,会陷入死循环,该宏将反复运行它自己。在测试宏时,一旦出现这种情形或者任何其他错误,可以按组合键中断宏运行,选择终止宏或进入调试模式来追踪错误。也可以使用 Esc键中断宏,但它只能中断等待用户输入的宏,不如使用组合键有效。

现在可以保存该工作簿,但在保存前,应该确定需要的文件类型,并考虑在下一节里介绍的安全问题。

不能将该工作簿保存为默认的“Excel工作簿(*.xlsx)类型”,这种文件格式不允许包含宏。可以将该工作簿保存为“Excel启用宏的工作簿(*.xlsm)类型”,文件为XLM格式。或者将该工作簿保存为“Excel二进制工作簿(*.xlsb)”类型,文件为二进制格式。这些文件类型与Excel以前的版本不兼容。另一种可供选择的是将该工作簿保存为“Excel 97-2003工作簿(*.xls)类型”,将生成一个与Excel 97至Excel 2003的Excel版本相兼容的工作簿。

1.宏安全性

要开发中断最少的宏,应使用Office 2007的安全限制。无需为工作簿获取复杂的数字签名,只需设置几个简单的选项即可。选择功能区中的“开发工具”选项卡,单击“宏安全性”按钮,将显示“信任中心”对话框,选择“宏设置”。在这里可以启用所有宏,但不推荐这样做,因为容易染上宏病毒。

一种更好的可供选择的方法是命名一个特定的目录作为受信任的位置。单击“信任中心”对话框左侧的“受信任位置”。一些受信任的位置可能已存在,如XLSTART 目录和模板目录。“添加新位置按钮”可指定一个合适的目录以存储工作簿。

现在,可以将包含刚录制宏的工作簿保存到受信任的位置里。单击 Office 按钮并选择“另存为”,在“另存为”下拉列表中选择.xlsm文件类型,然后在受信任位置里以名称Recorder.xlsm保存该工作簿。

如果在“另存为”对话框里看不到文件扩展名,例如.xlsm,那么应该打开Windows资源管理器,单击“工具”菜单,选择“文件夹选项”,在“查看”选项卡中,取消“隐藏已知文件类型的扩展名”前的勾号。

2.个人宏工作簿

如果选择在个人宏工作簿里存储录制的宏,那么该宏将被添加到名为Personal.xlsb的特定文件中。该文件是当关闭Excel时保存在Excel启动目录里的一个隐藏文件,这意味着启动Excel时会自动装载Personal.xlsb文件,因此,该文件中的宏总是可以为其他的工作簿使用。

如果Personal.xlsb文件不存在,那么宏录制器将会自动创建该文件。可以使用功能区“视图”选项卡中的“取消隐藏”按钮,在Excel窗口里看到该工作簿,但没有必要这样做,因为可以在VBE窗口中检查和修改Personal.xlsb宏。

在一种例外情形下,可能希望使Personal.xlsb可见,即需要在该工作簿的工作表中存储数据。在添加数据后,使用功能区“视图”选项卡中的“隐藏”按钮可重新隐藏该工作簿。如果创建了一个通用的实用宏,并希望在任何工作簿中都能使用该宏,应将其存储在Personal.xlsb 中。如果该宏仅与当前工作簿应用程序相关,则将该宏存储在当前工作簿中。1.1.2 运行宏

要运行一个宏,可以使用Recorder.xlsm工作簿中的另一个工作表;或者打开一个新的空工作簿,让Recorder.xlsm在内存中打开。可以仅仅在打开的工作簿中运行宏,此外,也可以从任何其他打开的工作簿中运行这些宏。

利用在录制过程开始时指定的快捷键运行一个宏;也可以通过单击功能区“视图”选项卡中的“宏”按钮或者通过单击功能区“开发工具”中的“宏”按钮运行该宏,打开的“宏”对话框如图1-3所示。可以通过双击宏名,或者选择宏名后单击“执行”运行该宏。

通过按组合键可以打开相同的对话框。

1.快捷键

可以使用图1-3所示的“宏”对话框改变指定给某个宏的快捷键。选择宏名,单击“选项”,打开如图1-4所示的对话框。图1-3图1-4

同一工作簿中有多个宏时,可能会使用该对话框为多个宏指定相同的快捷键(虽然开启宏录制器时显示的对话框不允许指定已经使用的快捷键)。

极有可能两个不同的工作簿包含带有相同快捷键的宏。如果发生这种情况,当使用该快捷键时,会运行哪个宏?将按字母顺序首先运行相应的宏。

快捷键适合于经常使用的宏,特别是喜欢使用键盘操作的用户。一些快捷键是值得记住的,如果有规则地使用这些快捷键,就不会忘记它们。快捷键不适合那些不经常使用的宏,也不适合为不够熟练的用户简化操作而设置的宏。建议为宏指定有意义的名字,并从“宏”对话框中运行宏。也可以选择从添加到工作表中的按钮运行宏,稍后将学习这方面的内容。

2.绝对录制和相对录制

当运行MonthNames1时,该宏返回输入月份名称时所选择的单元格。只要在绝对录制模式下记录了选择单元格B1的指令,宏在运行时就会选中B1。运行前活动单元格的位置无关紧要。而相对录制模式下,活动单元格的位置记录是相对的。例如,当前被选中的单元格是A10,打开宏录制器,选择B10,那么宏录制器注意到的动作只是向右移动了一格,而非选中B10。

录制第二个名为MonthNames2的宏,该宏与上一个宏相比有3点不同:

◆ 在开始录制之前或者录制时,单击功能区“开发工具”选项卡中的“使用相对引用”按钮;

◆ 输入前不要选择将要输入“一月”内容的单元格。当运行宏时,希望录制的宏将“一月”输入到活动单元格里;

◆ 在关闭录制器之前,选择“一月”下面的单元格来结束录制,而不是选择单元格A2。

打开一个空工作表,并选择单元格 B1。开启宏录制器,指定宏名为 MonthNames2。输入大写字母M作为快捷键,此时宏录制器不允许再使用小写字母m。单击“确定”,然后选择功能区“开发工具”选项卡中的“使用相对引用”按钮。

与录制宏MonthNames1相同,输入“一月”和其他的月份名称。选择单元格区域B1:G1,然后单击功能区“开始”选项卡上的“加粗”和“倾斜”按钮。

确保从左到右选择 B1:G1,这样使得 B1 为活动单元格。如果从右向左或者从下到上选择单元格,那么在录制的宏里会导致错误,这是在录制过程里小的缺陷。当采用相对录制时,总是从左上角开始选择。这是所有版本的Excel VBA中存在的问题。

最后,选择在“一月”下面的单元格B2,然后关闭宏录制器。

在运行宏MonthNames2之前,选择一个起始单元格,例如单元格A10。现在,该宏将在第10行输入月份名称,开始于列A,宏结束时选中起始单元格下方的单元格。

在录制选择单元格的宏之前,需要考虑是使用绝对引用还是相对引用录制。如果选择输入数据条目的单元格或者打印区域,可能需要使用绝对引用录制。如果希望在工作表的不同区域都可以运行宏,则可能需要使用相对引用录制。

如果试图复制使用选择数据列或数据行中最后一个单元格的效果,则应该使用相对引用录制宏。如有必要,录制宏的过程中,可在相对引用录制和绝对引用录制之间切换。例如,在绝对引用模式下选择列的顶部,之后切换到相对引用,使用到达列的底部,然后再使用一次向下箭头键到达第一个空单元格。

Excel 2000是成功地记录使用Ctrl键选择不同高度和宽度的单元格区域块的第一个Excel版本。如果从数据块的左上角开始,同时按下Shift键和Ctrl键不放,再按向下箭头键和向右箭头键,可以选择整个数据块(只要数据间没有间隔)。如果使用相对引用记录下这些操作,则可以使用宏选择不同大小的数据块。Excel的早期版本记录下原始数据块大小的绝对地址,而不管记录的模式。1.1.3 Visual Basic编辑器

现在来看看在Excel的后台发生了哪些事。如果希望理解宏、修改宏并发掘VBA的强大功能,学会使用Visual Basic编辑器(VBE)是必要的。VBE运行在独立于Excel窗口的专有窗口。可以使用许多方式激活VBE窗口。

首先,可以通过单击功能区“开发工具”选项卡中的Visual Basic按钮来激活VBE窗口,也可以同时按下Alt键和F11键来激活该窗口。作为切换键,可以用于在Excel窗口和VBE窗口之间进行切换。如果希望编辑指定的宏,则可以使用功能区“开发工具”选[1]项卡中的“宏”按钮或者状态栏左侧的播放宏按钮打开“宏”对话框,选择该宏,单击“编辑”按钮,打开VBE窗口,如图1-5所示。图1-5

当切换到VBE窗口时,可能除了菜单栏外,什么都看不到。如果看不到工具栏,则使用菜单“视图”→“工具栏”,单击“标准”。使用菜单“视图”→“工程资源管理器”和“视图”→“属性窗口”显示左侧的窗口。如果不能看到右侧的代码模块,那么在“工程资源管理器”窗口里双击“模块1”图标。

1.代码模块

所有宏都驻留在代码模块里,如图1-5中VBE窗口的右侧所示。有两种类型的代码模块:标准模块和类模块。在图 1-5 的右侧所看到的是一个标准模块。可以使用类模块创建自己的对象,除非研究非常高级的操作,现在不需要知道更多关于类模块的知识。参见第15章关于如何使用类模块的更多详细内容。

应用程序里已经包含了一些类模块。这些类模块与工作簿的每个工作表相关联,整个工作簿也有一个对应的模块。可以在“工程资源管理器”窗口的“Microsoft Excel对象”文件夹里看到这些模块。在本章后面有更多与这些模块相关的内容。

用户在工作簿中可添加的代码模块的数量无上限。宏录制器已经插入了一个名为“模块 1”的代码模块。每个模块都可以包含许多宏。对于小型应用程序,可以将所有宏放置在同一个模块里。对于更大型的工程,将互不相关的宏归类到单独的模块里能更好地组织代码。

2.过程

在 VBA 中,宏被称为过程。有两种类型的过程:子过程和函数过程。在下一节中,将介绍函数过程。宏录制器只能生成子过程。在图1-5所示中可以看到通过宏录制器创建的MonthNames1子过程。

子过程以关键字Sub开始,之后是过程的名称,然后是一对括号。关键字End Sub标志着子过程的结束。虽然不是强制的,但建议Sub过程里的代码采用正常缩进,使之与过程的开始和结束相区分,以便更容易阅读整个过程。进一步的缩进通常用于区分代码块,诸如If判断语句和循环结构。例如:

If ActiveCell.Value = 10 Then

ActiveCell.Font.Bold = True

End If

任何以单引号开始的行都是注释行,VBA忽略该行。为代码添加注释行来提供代码说明是非常重要的良好的编程习惯之一。也可以在代码行的右侧添加注释,例如:

Range("B1").Select '选择单元格B1

在这个阶段,代码不可能非常完美,但应该能够粗略地知道将要发生什么。如果查看MonthNames1中的代码,则将了解该代码先选择单元格,然后将月份名称赋值给活动单元格。用户可以编辑部分代码,例如修改拼写错了的月份名称;或者可以识别和删除设置字体为加粗的代码行;或者可以选择并删除整个宏。

注意MonthNames1和MonthNames2之间的不同。MonthNames1选择特定的单元格,例如B1和C1。MonthNames2使用Offset来选择与活动单元格在相同行但向右偏离一列的单元格。是不是已经找到一点VBA语言的感觉了?

3.工程资源管理器

工程资源管理器是基本的导航工具。在 VBA 中,每个工作簿都包含一个工程。工程资源管理器显示所有已经打开的工程以及这些工程的组成元素,如图1-6所示。

可以使用工程资源管理器查找和激活工程中的代码模块。双击某模块图标,打开并激活该模块。也可以在工程资源管理器中插入和删除代码模块。在工程资源管理器窗口里的任意位置单击鼠标右键,从弹出的上下文菜单中选择“插入”,可添加新的标准模块、类模块或用户窗体。

要删除“模块1”,在该模块名上单击鼠标右键,选择“移除模块1”。注意,不能在与工作簿对象或工作表对象相关联的模块中执行删除操作。模块中的代码可被导出到一个单独的文本文件中,或从文本文件中导入代码。

4.属性窗口

属性窗口显示工程资源管理器窗口中当前活动对象在设计时可以改变的属性。例如,在工程资源管理器窗口中单击 Sheet1,则在属性窗口里显示其属性,如图 1-7 所示。将 ScrollArea 属性设置为A1:D10,限定用户在工作表中的工作区域。图1-6图1-7

可以相当容易地获取与任何属性相关联的帮助屏幕。只需选择属性,然后按F1键,如图1-7中所选取的ScrollArea属性。1.1.4 运行宏的其他方法

前面已介绍了如何使用快捷键运行宏和如何从功能区和状态栏的宏按钮运行宏。这两种方法对用户都不是特别友好。需要对宏很熟悉,才能轻松地使用这些技术。可以通过将宏附加到按钮中,使其更便于访问。

当宏属于特定的工作表,并且只用于该工作表的特定部分时,可以将宏附加到某一按钮上,在恰当的位置嵌入工作表。如果希望某个宏通用于任意工作表或工作簿,且能在工作表的任意位置被使用,最好把宏附加到快速访问工具栏中的按钮上。

许多其他对象也可以附加宏,比如组合框、列表框、滚动条、复选框和选项按钮。所有这些对象都称作控件(参见第10章关于控件的更多信息)。也可以将宏附加到工作表中的图形对象,例如使用功能区“插入”选项卡中的“形状”按钮所创建的形状。

1.工作表按钮

Excel 2007有两组不同的控件,都能嵌入到工作表中。一组源自以前版本的窗体工具栏,另一组源自以前版本的控件工具箱。窗体工具栏最初出现在Excel 5和95中,可以在工作表里嵌入窗体控件,也可以用于Excel 5和95的对话框工作表创建对话框。Excel 97引入了在控件工具箱工具栏中更新的ActiveX控件,可以在工作表里嵌入ActiveX控件,或者将其使用在VBE的用户窗体中创建对话框。

要在Excel 2007中创建控件,选择功能区中的“开发工具”选项卡。在“控件”组中,单击“插入”按钮打开如图1-8所示的窗口。图1-8

为与老版本的Excel相兼容,Excel 97和更高版本的Excel都支持两种控件和创建对话框的技术。如无须兼容Excel 5和95,可以只使用ActiveX控件。

2.窗体控件[2]

窗体控件的好处之一是比ActiveX控件更简单,因为它们并不具备ActiveX控件的全部功能。例如,窗体控件仅能响应单个的、预定义的事件,通常是鼠标单击事件。ActiveX 控件可以响应许多事件,例如鼠标单击、双击或者按下键盘中的某按键。如果不需要这些功能,简单的窗体控件是不错的选择。打开功能区“开发工具”选项卡中的“插入”按钮,单击控件对话框内左上方的按钮,在工作表中创建一个窗体按钮。

在工作表中选定放置按钮的位置,鼠标单击并沿对角线方向拖曳至适合的大小,这样就绘成了一个按钮。此时,将出现如图1-9所示的“指定宏”对话框,可以选择要附加到按钮中的宏。图1-9

单击“确定”完成宏的指定。之后编辑按钮中的文本,使其具有更有意义的功能提示。单击一个单元格,按下该按钮,运行所附加的宏。如需编辑该按钮并且该按钮未被选中,可在该按钮上单击鼠标右键选择该控件,同时显示一个上下文菜单。如果不希望显示上下文菜单,按住Ctrl键的同时在该按钮上单击鼠标左键或右键来选择它(不要在按下Ctrl键时拖动鼠标,否则将为该按钮创建一份拷贝)。

如果希望将按钮与工作表的网格线对齐,则在使用鼠标绘制按钮

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载