Excel 2003 VBA 编程参考(介绍)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Excel 2003 VBA 编程参考
Paul Kimmel
Stephen Bullen
John Green
Rob Bovey
Robert Rosenberg
关于作者
Paul Kimmel
Paul Kimmel于1990年创立了Software Conceptions公司,并从那时开始设计和创建软件以及编写计算机图书。
Paul Kimmel是几本关于VBA、VB、、C#、Delphi和C++书籍的作者。
Paul也是的VB T oday栏目所创办的双月刊专栏作家,是一些杂志和在线刊物(包括)的经常投稿人。
如果您要设计和创建软件,您可以通过pkimmel@与他联系。
Stephen Bullen
Stephen Bullen以爱尔兰的Carlow和英国的London为基地。
他自1997年起就开始运营自已的公司(Bussiness Modelling Solutions公司),专注于Excel开发和咨询,并且已经为一些世界上最大的公司工作过。
他的公司网站包含了他工作的大量的例子,包括扩充Excel功能的工具和实用程序,以及一些Excel开发技术示例。
Stephen Bullen花费了很多业余时间在CompuServe Excel讨论区和Microsoft的互联网新闻组中回答问题来帮助其他Excel用户。
由于认可他所作出的贡献和知识,Microsoft已经从1996年开始每年都授予他MVP(最有价值专家)称号。
Stephen编写了Excel 2000和Excel 2002 VBA中后面几章的大部分内容。
本书由Paul Kimmel进行了适当的更新,Stephen没有直接参与本版本的编辑。
John Green
John Green居住在澳大利亚的悉尼,专门从事Excel和Access方面的独立咨询。
他有30年计算机方面的经验,拥有一个化学工程学位和MBA,汲取了多种不同的教育背景。
他在澳大利亚和海外进行软件应用程序和操作系统方面的培训课程。
Microsoft已经从1995年开始每年授予他MVP称号。
John是Excel 2000和Excel 2002 VBA编程参考的主要作者,该书由Paul Kimmel进行了适当的更新,John没有直接参与本版本的编辑。
Rob Bovey
Rob Bovey是一个专门从事于Microsoft Office、Visual Basic和SQL Server应用程序方面的软件开发者。
他是自定义应用程序开发厂商的创始者和领头人。
Rob为Excel开发了一些加载宏并被Microsoft发布,他也是Microsoft Excel 97开发者工具的合著者。
Microsoft已经从1995年开始每年授予他MVP称号。
Rob编写了Excel 2002 VBA编程参考中的Data Access with ADO一章,没有直接参与本版本的编辑。
Robert Rosenberg
Robert Rosenberg经营他自已的咨询业务,专门提供Microsoft Office方面的自定义解决方案和高级培训。
他的客户包括在娱乐、金融和法律领域的财富五百强公司。
作为Microsoft 在Excel方面的MVP,他也代表Microsoft为用户在他们的互联网新闻组上不断地提供高级在线支持。
Robert负责更新了本书2002版中的Excel目录和Office索引,包括为已有的VBA对象更新了示例代码和列表,同时也列表描述了新的对象以及它们的方法、属性和/或参数。
Brain Patterson (执笔者)
Brain Patterson目前为Illinois Mutual Life工作,作为一名软件开发协调员,通常处理在WinForms方面的C#或者公司的互联网站。
Brain自1994年起已经为不同的出版社进行过写作,已合写过几本.NET相关的书籍,包括“转移到Visual ”和“使用 进行.NET企业开发”。
您通常能在MSDN新闻组中的找到他的贴子,您也可以通过电子邮件bdpatterson@与他联系。
介绍
Excel于1985年在Macintosh上初次登场,从此以后,在Mac环境中它从未失去作为最流行电子表格应用程序的地位。
在1987年,Excel也被转移到PC上,运行在Windows环境中,它花费了好多年去超越当时在计算历史中最成功的软件系统之一的Lotus 1-2-3。
在1981年IBM PC发行之前,有一些成功的电子表格应用程序,它们是VisiCalc、Quattro Pro和Multiplan。
最早是VisiCalc,但它很早就失败了。
Multiplan是Microsoft Excel的前身,使用R1C1单元格地址,该地址方式在现行版本的Excel中仍然是有用的,您可以在选项中选择使用该方式。
但是在1982年,Lotus 1-2-3发布之后不久就占居了PC电子表格市场的主导地位。
早期的电子表格宏
1-2-3是第一个在一个程序包中提供电子表格、图表和数据库功能的电子表格应用程序。
然而,它失去成功的主要原因是它的宏功能。
据说,1-2-3的开发者创建宏作为产品的一个调试和测试机制,他们仅在最后时刻认识到了宏的潜力,并在事后才将宏的功能包含在他们产品的最终版本中。
无论它们的起源如何,宏带给非程序员成为程序员以及自动完成他们的电子表格的简单的方法。
它们抓住了机会并且运行,最后,它们在计算机领域拥有了一片独立的空间。
最初的1-2-3宏通过敲击相同键执行用户想要执行的相同的任务,因此,创建一个宏是非常简单的,处理从正常的电子表格操作到编程操作没有新内容需要学习。
您所需要做的就是记住按什么键并且记录下它们。
唯一与传统的编程相似的是八个特别的命令,/ x命令。
/ x命令提供了一些基本的创建和分解功能的判断、一种从用户获取输出的方法、以及一种创建菜单的方法。
1-2-3宏的一个主要问题是它们的脆弱性。
当时,还没有带多工作表的工作簿,宏必须直接编写到它们所支持的电子表格的单元格中,与输出数据和运算保持一致。
宏完全受用户的支配,例如,当用户插入或者删除行或列时它们可能会被无意中破坏。
宏也完全受编程者控制,一个设计较差的宏在用户企图编辑电子表格数据时可能会相当容易被破坏。
尽管存在上述的这些问题,但用户仍非常喜欢他们新发现的编程能力,并且用这种神秘的语言编写了上百万行代码,运用神秘的技术去回避它的一些局限。
然而,代码经常设计得很糟糕、几乎总是有很少的文档说明并且很脆弱,可是却经常支持着关键的企业控制系统。
XLM宏语言
最初的Excel宏语言需要您在一个宏工作表中编写您的宏代码,并将该工作表保存为带.xlm 扩展名的文件。
用这种方式,保持宏与工作表分隔开。
现在,这些宏经常被称作XLM宏或者Excel 4宏,与在Excel 5中所引入的VBA宏语言相区别。
XLM宏语言由宏工作表上安排的函数调用所组成。
有几百个必要的函数提供了Excel所有的功能,并允许用户有计划的控制。
XLM宏语言比1-2-3宏语言更成熟和强大,甚至允许增强由版本2和3的1-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中运行。
这一次的“赌注”证明了1-2-3的失败。
到Windows继续存在的事实变得清楚的时候,Lotus真正的陷入了困境,因为它的用户大量地转向Excel。
1-2-3的Windows版本在1991年第一次发布,其实是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版本中它被逐步引入到了其它的Office 应用程序中。
在Office XP中,Excel、Word、Access、PowerPoint、FrontPage、Visio、Project和Outlook都使用VBA作为它们的宏语言。
(Microsoft在他们提供的产品中清楚地表明了他们对VBA地位的承诺。
)
自从Excel 5发布以来,Excel全面支持XLM和VBA宏语言,并且对XLM的继续支持应该会持续,但在某种程度上来说将会减少,以使用户转换到VBA。
VBA是一种面向对象的程序设计语言,与Visual Basic 6.0程序设计语言在结构化和处理对象方面完全相同。
在将来的VBA版本中,您将可能看到VBA会与Visual 越来越相似。
如果您学会了在Excel中使用VBA,您也将知道如何在其它的Office应用程序中使用VBA。
Office应用程序的区别在于它们显露给VBA的对象不同。
为了给应用程序编程,您需要熟悉它的对象模型(object model)。
对象模型是您可以在应用程序中找到的所有对象的层次结构。
例如,Excel对象模型告诉我们有一个Application对象,它包含着一个Workbook对象,而该对象又包含着一个Worksheet对象,而Worksheet对象也包含着一个Range对象。
学习VBA比学习XLM宏语言更容易些,并且VBA功能更强大,通常更有效率,允许我们
能编写结构良好的代码。
我们也会写出一些结构糟糕的代码,但通过下面的一些原理的
学习,我们应该能够写出易于理解和维护的代码。
Excel 5在模块中编写VBA代码,那时(模块还)是工作簿中的工作表。
而工作表、图表工作表和对话框工作表是包含在Excel 5工作簿中的其它类型的工作表。
一个模块事实上只是一个带有一些特定格式字符的字处理文档,能帮助您编写和测试代码。
Excel 97
在Excel 97中,Microsoft在VBA界面中引入了一些“戏剧般”的变化,同时也对Excel 对象模型作出了一些变化。
从Excel 97开始,模块在Excel应用程序窗口中是不可见的,并且模块不再是包含在Workbook对象中的对象。
模块包含在与工作簿相关联的VBA工程中,只能在Visual Basic编辑器(VBE)窗口查看和编辑。
除了标准模块外,也引入了类模块,允许您创建自已的类。
引入了命令栏,以取代菜单和工具条,同时,用户窗体取代了对话框工作表。
与模块一样,也只能在VBE窗口中编辑用户窗体。
一般来说,Excel仍然支持那些被取代了的对象,但隐藏了这些对象并且在帮助系统中没有提供相应的帮助文档。
在以前版本的Excel中,诸如按钮等内嵌于工作表中的对象仅能对单个事件作出响应,通常是Click(单击)事件。
Excel 97大大地增加了VBA代码能响应的事件的数量,并且通过提供给工作簿对象、工作表对象、图表工作表对象的事件处理程序使这种方式正式化。
例如,现在工作簿对象能够响应20种事件,诸如BeforeSave、BeforePrint和BeforeClose。
Excel 97也引入了ActiveX控件,能内嵌于工作表和用户窗体中。
ActiveX控件能够响应更大范围的事件,诸如GetFocus、MouseMove和DblClick。
VBE提供给用户更多的帮助。
例如,当我们输入代码时,将会自动弹出显示该对象合适的方法和属性列表,以及函数和方法的变量和参数值。
对象浏览器更优于先前的版本,例如它允许我们查找项目并提供综合信息。
Microsoft已提供了一个扩展库,使得我们可以编写VBA代码去操纵VBE环境和VBE工程。
因此,我们可以编写能够直接使用代码模块和用户窗体的代码。
我们也可以设置应用程序缩进编排模块代码,或者从模块中输出代码到文本文件。
Excel 97已经以Excel 98的形式被转到了Macintosh上,不幸的是,其中没有包括一些VBE 帮助功能,VBE扩展库也没有被引入到Mac中。
Excel 2000
Excel 2000在VBA编程方面没有引入明显的变化。
在Office 2000和Excel 2000的用户界面中作出了大量的改进,并且增强了一些Excel功能,比如数据透视表,并且添加了新的数据透视图功能。
网络用户能从Excel 2000中获得更多的好处,特别是以网页保存工作簿的功能。
同时,通过新的在线协作功能,也给需要共享信息的用户提供了改进。
为VBA用户长期盼望的改进是引入了无模式窗体。
以前的Excel仅支持模式对话框,即当模式对话框在屏幕中获取焦点时,如果不关闭该对话框,则不能操作其它的对象。
无模式对话框允许用户继续其它的工作,而对话框浮动在工作表之上。
例如,无模式对话框能用于装载Excel中编写的应用程序时显示一个临时屏幕,和当一个长的宏运行时显示一个进度条。
Excel 2002
Excel 2002也引入了一些增值的变化。
再一次,Excel将其用户界面而不是程序功能作了主要的改进。
Microsoft继续集中改进与网络相关的功能,以使其更容易使用互联网利用和分配数据。
能够为VBA编程者有用的新功能包括一个新的Protection对象、SmartT ags(智能标签)、RTD(实时数据)和改进了对XML的支持。
新的Protection对象能让我们在保护工作表时让用户选择可以控制的功能。
例如,我们能决定是否让用户能进行排序、变化单元格格式、或者插入和删除行和列。
也有一个新的AllowEditRange对象,我们能使用它指定可以编辑特定单元格区域的用户,以及为了进行编辑单元格操作,他们是否必须使用密码。
我们能对不同的单元格区域应用不同的许可组合。
SmartT ags允许Excel识别输入到单元格中的含有特定意义的数据。
例如,Excel 2002能够识别股票市场缩写,比如MSFT为Microsoft Corporation。
当Excel碰到像这样的项目时,将显示带有弹出菜单的SmartT ag标志。
我们能使用该菜单获取相关的信息,比如这家公司最近的股票价格或者是一份总结报告。
Microsoft提供了一个工具,允许开发者创建新的SmartT ag软件,因此,我们可以看到出现了一类工具,可以运用SmartT ags使得数据在整个组织内或者在互联网中都是可用的。
RTD允许开发者创建用户能够提取的信息源。
一旦您与某个工作表建立了链接,源数据的变化将自动传递。
一个常见的用途是在交易过程中实时获取股价的变化,另一个可能的应用就是从科学仪器或者工业进度控制器中记录数据。
使用SmartT ags,我们将可能开发一个宿主应用程序,使得Excel用户更容易获取和使用动态信息。
改进对XML的支持意味着我们能更容易创建遍及互联网和局域网交换数据的应用程序。
当我们越来越依赖于这些极速发展的技术时,支持XML就越发重要。
Excel 2003
网络是现代生活中已普遍存在的一部分,随着网络重要性的日益增加,Microsoft已转移她的注意力在提供互联网功能方面上。
因此,这也反映在Excel 2003中所作出的一些变化。
除了新的互联网功能外,您还会发现扩展工作簿的功能、提供了分析数据的新函数、更好地支持XML和在互联网上共享工作簿,以及所改进的用户体验。
XML,或者eXtensible Markup Language,是一种自扩展的超文本语言。
最终,XML是文本和公共的、非专利的工业标准,容易扩展为跨互联网大范围的使用和转移。
由于对XML Excel数据更大的支持,和其它使用XML的企业解决方案共享电子表格数据也将会越来越容易。
极大的支持包括作为列表管理单元格区域,并且通过添加允许修改、筛选和识别标记这些列表的功能来增强了用户界面体验。
您能使用Windows Sharepoint服务更容易共享和更新您的Excel数据。
例如,在Excel中对共享在Sharepoint服务中的列表所作的变化会自动在Sharepoint服务中更新。
支持离线修改数据,并且当您下次连接时再次更新数据,这使得为繁忙的用户在外界中断时的工作不受影响,例如,在2003年的大停电期间。
在Excel 2003中,添加了一组新的功能强大的统计函数,还有能够同时比较工作簿、拥有大量的参考信息,以及支持像T ablet PC一样的无线设备连接,这都将给您和您的用户提供更丰富的用户体验。
本书的内容
本书完全面向想将VBA语言功能利用在他们的Excel应用程序中的Excel用户。
在这里,VBA语言仅局限于Excel范围内,而不作为一种通用的应用程序设计语言。
本书分三部分:
□程序设计
□Excel的高级功能
□有利于在线信息共享的新功能
同时,在附录A、B和C中包括了全面且更新了的对象模型参考。
本书的内容已经被重新组织,移除了几乎所有的编程信息。
此外,添加了一些新的章节,着重强调了面向对象编程、错误处理和编写强健的代码等方面的内容。
在这些章节中,您将会学到各方面的内容,包括概括性的知识、界面、错误处理和调试、编写加载宏、使用Windows API编程、以及处理国际间(兼容性)问题。
本书的第二部分为Excel用户讲解了新的和高级的功能。
这些功能——如对单元格区域和列表的支持——使得Excel成为一个高效的产品和编程工具是必不可少的。
本书的第三部分介绍了在互联网上共享Excel数据所增加的资源。
因为本书主要是一本程序设计者的参考书,所以我们着重强调关于程序设计方面的内容。
然而,由于大多数您喜欢的功能进一步得到了改进,因此,我们也用了一些章节对它们的内容进行了更新。
版本问题
本书最初为Excel 2000而编写,现在已扩展到Excel 2003。
与Excel 97相比,Excel对象模型发生了变化,因此本书相对较少的一部分内容适合这三个版本。
在我们所讨论的功能中,对以前版本所不支持的功能,我们将清楚地标识出来。
使用本书您需要具备的条件
在本书中所讨论的几乎每一方面都有示例,并且全部详细地写出了完整的代码,在适当的位置还有一些图形截屏。
您所使用的Windows版本是不太重要的,但您必须完全安装了Excel。
如果您想偿试涉及到Excel与其它Office应用程序相互交流的章节,您需要完全安装Office。
确保您的安装包括了能利用VBE和VBA帮助系统,有可能您在安装过程中会去除这些项目。
注意,在第13章和第14章中还需要您安装了VB6,因为这两章讲述了COM加载宏和SmartT ags方面的内容。
本书的约定
为了帮助您更容易阅读,获取更多的知识和重点,我们对本书的编排作了一些约定。
方框里的内容是与该方框周围文字相关的重点知识和需要记住的信息
决窍、建议、技巧和对当前讨论内容的旁白像这样以斜体显示。
关于文本样式:
□在介绍时高亮显示重要的词语
□显示键盘组合键如:CtrlA
□在文本中显示文件名、网址和代码如:当前.属性
□用下述两种方式表示代码:
●在代码示例中,用灰色背景高亮显示新的和重要的代码
●没有以灰色背景高亮显示的代码表示在当前内容中不太重要,或者该代码以前
已出现过
源代码
当您使用本书中的代码时,您可以选择手工输入所有的代码,或者利用本书的源代码文件。
本书所有的源代码可在中下载。
在该网站中,您可以方便地找到本书的书名(通过使用查找框或使用书名列表),并在本书的介绍页面单击下载代码链接获取本书所有的源代码。
因为一些书有相同的书名,您可以通过ISBN号更容易地找到它。
本书的ISBN是
0-764-55660-6。
一旦您下载了代码,您可以使用合适的解压工具进行解压缩。
另一方面,您可以到Wrox主要的代码下载页面/dynamic/books/download.aspx去发现本书中所要用到的代码以及所有其它Wrox出版的图书中的代码。
当您发现书中有错误后(勘误)……
我们非常努力地确保书中的文本或代码没有错误。
然而,没有一个人是完美的,错误不可避免的会发生。
如果您发现我们的书中有错误,比如拼写错误或者错误的代码,我们非常乐意得到您的反馈。
发现错误后请及时发送给我们,您可以节省其他读者遇到阻碍所花费的时间,同时您将帮助我们提供更高质量的信息。
您也可以找到本书的勘误。
首先,打开网站,通过使用查找框或书名列表查找本书的书名。
然后,在本书的介绍页面中,点击图书勘误链接。
在所打开的页面中,您将会看到已经发送且被Wrox的编辑发表的关于本书的所有勘误。
此外,包含每本书勘误链接的完整的书目列表也可以在/misc-pages/booklist.shtml。
如果您不能在本书勘误页中找到您发现的错误,可以到www.wrox.co m/contact/techsu pport.shtml 中,将您发现的错误发送给我们。
我们将检查您所发送的信息,如果合适的话,我们将此信息发表在本书勘误页中,并在本书下一版本中更正。
当您遇到困难或疑惑时……
如果您遇到问题,您可以到一些地方去求助。
在Excel方面最好的信息资源是与您一样对Excel有同样爱好的人,您可以在互联网上的一些新闻组中找到他们。
试着定位您的阅览器到下列站点,您将会发现愿意帮助和有能力帮助您的人:
□
订阅microsoft.public.excel.programming或求助任何新闻组,您能发送您的问题,并且通常在一个小时左右会收到答案。
Stephen Bullen和Rob Bovey维护着一些非常有用的网站,在那里您能找到大量的信息和
可供下载的免费文件,下面是它们的网址:
□
□
另一个由John Walkenbach维护的站点是:
□
也能通过下面站点与Wrox直接联系:
□——下载源代码和提供技术支持
□/list.asp?list=vba_excel——打开ExcelVBA讨论区
能通过发送电子邮件直接询问:
□pkimmel@
(尽量回复所有的询问,但如果您在其它人之后的话,需要排队。
建议您到多个地方发表您的询问,您可以获得更快速的帮助且可选择不同的答复。
)
其它有用的Microsoft信息资源如下:
□/office/——最新的新闻和技术支持
□/office/——关于如何使用Microsoft产品的开发者新闻和好的文章
□/technet——Microsoft知识库、安全信息和其它相关项目的资料
如果要与作者和其他人讨论,您可以加入网站中的p2p讨论区。
您可以在讨论区上发表与Wrox的图书相关的信息和技术文章、与其他读者和技术专家交流。
该讨论区提供了e-mail订阅功能,当您所选择的感兴趣的主题有新贴时,它会发送一份相应内容的邮件到您的邮箱中。
Wrox的作者、编辑、其他行业专家、以及读者都将会出现在这些讨论区中。
在中,您将会发现有一些不同的讨论区,它们不仅可以帮助您阅读本书,而且还可以帮助您开发自已的应用程序。
您可以按下面的步骤加入该讨论区:
1、打开,单击登录链接。
2、阅读使用条款并单击同意。
3、完成加入会员所必须填写的信息,同时您也可以自愿填写一些其他可选信息并单击
发送。
4、您将收到一份核实您帐号的电子邮件并完成加入的过程。
如果您没有加入P2P,您也能够阅读讨论区中的信息,但不能发表您自已的信息。
如果要发表您自已的信息,您必须加入P2P。
Excel 2003 VBA 编程参考
一旦您加入成为会员后,您就能发表新的信息,也能回复其他用户的贴子。
您在任何时间都
可以阅读信息。
当一个特定的讨论区有新的信息时,如果您想要用电子邮件通知您,可以单
击讨论区列表中该讨论区名字的图标来订阅。
关于如何使用Wrox P2P的更多信息,请阅读P2P常见问题解答(FAQs),其中包括了讨论
区如何运作以及P2P和Wrox图书的一些常见问题的详细说明。
为了阅读常见问题解答,
请单击任何P2P页面中的FAQ链接。
- 11 -
fanjy于2006年8月译PDF 文件使用 "pdfFactory Pro" 试用版本创建w 。