Excel 2013 VBA编程与实践(txt+pdf+epub+mobi电子书下载)


发布时间:2021-03-27 13:52:45

点击下载

作者:黄朝阳

出版社:电子工业出版社

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

Excel 2013 VBA编程与实践

Excel 2013 VBA编程与实践试读:

前言

Microsoft Excel经过了10多次更迭、升级,目前最新版本号为2013。Microsoft Excel 2013的功能极其强大,但是仅靠Excel内置功能并不足以实现灵活多变的工作需求,有时需要采用Excel VBA来弥补Excel的功能缺陷,加快运算效率。

本书提供了200多个Excel VBA应用案例,旨在借助案例提升读者对VBA的认知,同时解决工作疑难。配合VBA入门图书《来吧,带你玩转Excel VBA》或者《Excel VBA程序开发自学宝典》(第3版)将有更好的学习效果。

本书使用Microsoft Excel 2013软件进行编写,但90%以上的案例解决方案都通用于Excel 2003、Excel 2007、Excel 2010和Excel 2013。

丛书介绍“疑难千寻千解”丛书是由Excel技巧网(ExcelTip.Net技术社区)的负责人、微软最有价值专家(MVP)黄朝阳先生策划并组织编写的一套系列书籍。

Excel技巧网旨在重点推广Office 2010及更高版本的应用,并为广大Office爱好者提供一个内容充实、分类清晰、经典实用、精彩纷呈、互惠学习、友好交流的平台。社区成立不久便吸引了众多微软MVP和有志于推广Office应用技术的高手驻足,长期为网友免费解答疑难问题,并勤于将精彩的答疑帖子按其所涉及的知识和应用两个维度,整理成为原创技术文章。

社区设有“讨论”、“文章”、“资源”等几大技术专区,并按照功能划分为Excel各类功能、Word、PowerPoint、Access等主题分类,本书的编写基于Excel的函数与公式分类。

本丛书由黄朝阳、王建发、陈国良、荣胜军、陈树青、李懿、陈少迁等微软MVP,以及罗刚君、李术彬、林盘生、章兰新、任强、彭佳等多位社区资深版主联手打造。得益于多年来在社区答疑中的磨砺,作者们将丰富的实战经验付诸笔端,精心设计了上千个案例,将Office方方面面的知识点融入其中。每个案例都采用一般用户遇到疑难时最可能的提问方式和应用场景对问题进行描述,提供具有针对性的解决方案和详尽的操作步骤,并配合以原理分析和知识扩展环节,既授人以鱼,又授人以渔。丛书采用“疑难”加“知识点”的特色目录索引,方便读者根据需要快速查找。

自2010年年底以来,本丛书已先后出版了《Excel 2010操作与技巧》《Excel 2010函数与公式》《Excel 2010 VBA编程与实践》《Excel 2010 SQL完全应用》《Excel 2010数据透视表大全》《Excel 2010 VBA入门与提高》《Word 2010实用技巧大全》《PowerPoint 2010应用大全》等读本。图书一经上市,立即得到业界诸位专家的推荐和广大读者的一致好评,在当当、京东、亚马逊等各大网上书店几度脱销待货。截至2015年3月,本丛书销量已超过25万册,@Excel技巧网_官方微博 已茁壮成长为粉丝过百万的Office类第一大新浪微博博主,旗下@Excel一分钟动画教程、@Word技巧教程、@PPT技巧教程、@Office学吧 等系列新浪微博和腾讯微博、微信公众号“Excel技巧网”分享了大量的学习资料,深得粉丝喜爱和推崇。

在与读者的互动交流中,我们看到了他们对于问题解决的喜悦和对更多知识的殷切期待!为此,我们厉兵秣马,砥砺前行。自Office 2013版发布以来,作者们潜心研究,耗时两年多完成新版图书写作。对于渴望学习和掌握新知识的Office用户来说,与其千百次地找寻问题答案,不如静心地读此丛书一卷。

读者对象

本书适用于两类读者,一是有Excel VBA基础,想进一步研究程序设计思路、代码防错技术、代码优化之道者;二是没有Excel VBA基础,也不打算深研VBA,只是想借助现成的案例文件解决工作的疑难者。

本书包含205个实用案例和一个综合应用案例。前205个案例在提供详细的操作步骤的同时还注重思路分析,力图让读者明白怎么操作和为什么要如此操作,以及对知识点举一反三,将其顺利地扩展到其他应用领域。读者可以从这些案例中学到开发思路,也可以稍加修改就直接将案例代码应用到自己的工作中。

最后一个综合应用案例会用到近百个知识点,主要介绍开发送货单套打程序系统的步骤和思路。尽管名字为送货单套打,但代码和思路并非仅限于送货单,一切通过针式打印机打印的多联票据皆可采用。送货单与其他单据的差异仅体现在格式不同或者数据的存放位置不同,编写代码的思路是一致的。

阅读指南

本书共分14章,涉及制表的方方面面。前13章分别为基础理论、数据查找技巧、数据处理、报表打印、借用事件让程序自动化、开发自定义函数、文件与文件夹管理、VBA操作图表、VBA操作图形对象、窗体控件应用、功能区菜单与backstage视图设计、用VBA访问网络资源、设计Excel通用工具,每章有数十个案例。为了让读者能学以致用,每章提供了3个思考与练习题。

最后一章为综合应用,展示开发送货单套打程序系统的思路与步骤。

详细的章节内容如下:

第1 章 基础理论包含变量、常量与数据类型和程序防错要点,重点帮助读者补充VBA编程的一些基础知识。

第2章 数据查找技巧包含快速查找、跨表查找内容、文件查找与转换和图片查找与引用,主要讲述查找与引用数据、文件、图片等对象的经典案例。其中,数据查找提供了多种思路,尽量展示效率最高且具有容错性的代码与技巧,提供33个案例。

第3章 数据处理包含按条件定位的技巧、数据处理及格式转换、单元格合并技巧、报表合并与拆分、单元格颜色的综合应用及重复数据处理,提供56个案例。

第4章 报表打印包含打印设置和特殊打印格式设计,其中设计工资条和底端标题行最有实用价值和通用性。

第5章 借用事件让程序自动化包含工作表事件、工作簿事件及应用程序事件。

第6章 开发自定义函数包含自定义函数基础、开发自定义函数和开发具有可选参数的自定义函数。

第7章 文件与文件夹管理包含文件管理和文件夹管理。

第8章 VBA操作图表包含4个案例,展示利用VBA批量修改图表格式的技巧。

第9章 VBA操作图形对象包含图形对象的批量操作、批注的高级应用和图形对象综合应用。

第10章 窗体控件应用包含ActiveX控件应用、窗体设计技巧和窗体与工作表之数据交互。

第11章 功能区菜单与backstage视图设计包含创建功能区菜单和backstage视图设计,提供8个案例。

第12章 用VBA访问网络资源包含导入网页列表和导入不规范的网页数据两方面应用,提供4个案例。

第13章 设计Excel通用工具包含开发Excel插件、封装代码和设计安装程序。

第14章 开发送货单套打程序属于综合应用,该案例涉及近百个VBA知识点,设计大中型系统时可以参考本章的思路。

本书约定

为了帮助读者熟悉本书对鼠标操作、键盘指令等描述方式,更顺畅地阅读本书,您有必要了解以下内容。

· 菜单

本书中表示连续多个菜单指令时,使用右箭头“→”进行连接,例如,单击“文件”选项卡→“选项”,弹出“Excel选项”对话框→“公式”选项卡,表示依次单击“文件”选项卡的“选项”命令,在弹出的“Excel 选项”对话框中单击“公式”选项卡。

· 鼠标

本书中表示鼠标操作时,均使用标准的表示方法。其中,“指向”表示将鼠标指针移到对象之上,且不单击任何按钮;而“单击”特指利用鼠标左键单击对象;“右键单击”表示利用鼠标右键单击对象;“双击”表示快速按下鼠标左键两次;“拖放”则表示在按下鼠标左键不松开的状态下拖动鼠标,拖到目标区域后再放开鼠标左键。

· 键盘

本书中表示按键时使用括号“< >”包含,例如,“按组合键”表示同时按下键盘上的Ctrl 键、Shift 键和Enter 键。其他按键的表示方法相同,如果需要特殊操作方法,会在相关内容中详细说明。

本书特点

本书与市场上的其他Excel书籍有很大的不同。本书文体结构新颖,案例贴近实际,讲解深入透彻,表现为以下几个方面。

· 场景式提问

本书从成千上万名网友的提问中精心归纳、提炼出各类问题,并还原为贴近真实的求助语言及案例,方便读者搜寻与实际工作相似的问题。

· 增强式目录

本书总体章节划分以“基础理论→分类应用→综合实战”为主线,将VBA的主要知识点和经典解决方案设计到每个疑难的案例中,并采用“疑难”加“知识点”的特色目录索引,方便读者根据需要翻阅和查找。

· 开创式结构

本书案例中的“解决方案”环节是对问题的思路解说,结合“操作方法”环节中的步骤让人更容易理解。“原理分析”环节则主要解释所使用代码的工作原理。“知识扩展”环节包括与案例相关的知识点补充,可拓展读者的视野,同时也有利于理解案例本身的解决思路。

本书的代码还有两个显著的特点,有别于市场上的其他同类书籍,即处处确保代码的防错与通用性。

· 防错

防错是指编写代码时尽可能考虑所有可能出错的情况,并在代码中加以防范,或者根据不同的潜在的运行环境提供不同的执行方案,让代码可以在多种情况下顺利执行,而不会弹出错误提示框导致程序中断。

· 通用

通用性是指代码可以适应不同的环境。环境是指软件的不同版本,例如,Windows XP、Windows Vista、Windows 7、Windows 8操作系统都可以顺利执行本书所有案例的代码。

环境还包括表格的区域。本书尽可能不采用硬编码引用工作表对象和区域地址,而采用具备自动适应变化的代码作为数据处理的引用源;从而使代码适应不同的用户,或虽是同一用户,但工作表数据区域变化时皆可使用。例如,Range("A1:D10")引用区域属于硬编码,当数据区域变化后,代码必须修改才可执行;而采用ActiveSheet.UsedRange或者ActiveCell.CurrentRegion两种方法引用区域则可以适应数据区域的增减变化,从而提升代码的通用性。

学习方法

本书是VBA编程的案例集粹,其宗旨在于为读者解决实际工作的疑难,以及对同类问题提供解决思路。

书中各章节的结构虽然是从易到难,但章节之间相互独立,即可以从任意章节开始学习,不需要遵照从前至后的顺序阅读。

本书每个案例中的“解决方案”部分表示对问题的思路解说,配合“操作方法”中的步骤和代码更容易理解。“原理分析”部分则主要包括两方面内容:代码中部分方法或者语句的语法解释,以及解决本疑难的理论依据。“知识扩展”部分包括与本例问题或者本代码相关的知识补充,用于扩展读者的知识范围,同时也有利于理解本例代码的思路。

本书是“疑难千寻千解”丛书之一,可为读者解决VBA编程的疑难,同时也是作者罗刚君的另一本著作《来吧,带你玩转Excel VBA》的升级版与配套教材。《来吧,带你玩转Excel VBA》重点在于讲述VBA编程的基础理论、语法和插件的设计过程,该书适合完全没有VBA基础者学习;而本书是该书配套的案例,可以使读者将理论付诸实践,解决实际工作中的疑难及开发属于自己的插件。

售后服务

本丛书由Excel技巧网(ExcelTip.Net技术社区)出品,电子工业出版社出版。本丛书不提供随书光盘,书中案例对应的所有文件请到以下网址下载:

http://www.exceltip.net/bkdl.php

或者登录电子工业出版社计算机分社的网站(www.broadview.com.cn),搜索书名或书号就可以找到相应的图书资源。

读者在阅读中有任何疑难问题或者建议、Bug反馈等都可以到Excel技巧网社区发帖,包括求助、交流,也可以在社区下载与本书相关的文档。社区为本丛书开辟了一个专门的版面用于编读往来,网址如下:

http://www.exceltip.net/forum-75-1.html

同时,本书也配备了专属的QQ群作为售后服务的联系方式,群号公布于上述网址,读者可以申请到群中与作者面对面地交流。欢迎关注:

新浪微博:@Excel技巧网_官方微博

腾讯微博:@Excel技巧网

微信公众号:Excel技巧网编著者第1章基础理论本书主要面向追求实用的办公室VBA用户,为读者提供实战案例,解决工作中的疑难。因此,本书有别于理论教学书籍。为了让读者能更好地理解代码,读懂程序的思路,本章将通过5个案例简要介绍一些基础理论。1.1变量、常量与数据类型

几乎每个VBA用户在执行代码的过程中都会遇到程序错误,其中有较多的错误都与变量、常量和数据类型相关。本章通过两个案例说明数据类型的重要性、如何定义变量,以及公共变量的用途,同时也会在知识扩展环节向读者介绍更多的关于变量、常量和数据类型的知识。疑难1 正确地定义变量和数据类型有何优势

所有的教材都强调编程时需要定义变量且声明变量的数据类型。定义变量和数据类型究竟有何用处?体现在何处?不指定变量的数据类型有何不良后果呢?

→ 解决方案

编程时正确地定义变量的数据类型相当重要,其重要性主要体现在5个方面,包括帮助用户检查录入的变量名称是否有误、加快代码录入速度、防止运算错误、创建提示信息、加快代码执行速度。本例通过这5方面逐一展示其优势,让读者对变量有更深刻的认识。

↙ 操作方法

1.帮助用户检查录入的变量名称是否有误

具体步骤如下:

步骤1 按组合键打开VBE窗口。

步骤2 单击菜单“插入”→“模块”,然后在模块中录入以下代码:

步骤3 选择当前过程,并按下键执行代码,当活动工作簿中有Sheet1、Sheet2和Sheet3时,代码执行结果如图1-1所示。■ 图1-1 获取工作表目录

很显然,上面的代码执行结果有误,问题出在何处?

由于代码比较简短,可以很快找出问题出在何处——错误根源在于代码的拼写不对,误将mystr拼写为myste。如果代码较长,在整段代码中查找以上问题是相当困难的事。

步骤4 继续录入第二个过程,代码如下:

编写VBA代码时,如果定义了变量,在书写变量名称时,VBA会自动调整其大小写状态,使其保持与声明变量时所用的大小写状态一致。

基于以上原则,在定义变量名称时应采用大小写混用状态,而录入代码时,一律采用小写或者大写,当变量名称拼写正确时,VBA会自动纠正变量的大小写状态。如果发现书写变量名称后变量的大小写状态不变,则表示变量名称的拼写有误。

第2个过程中声明的变量名称为“MyStr2”,在调用变量时,如果将变量名称书写为“mystr2”,那么变量名称会自动更正为“MyStr2”,而将变量名称书写为“myste2”,则不会自动更正。因此,在书写代码时可以根据这个规律及时发现代码是否存在拼写错误。

2.加快代码录入速度

如果变量名称过长,将会影响代码的录入速度,而定义变量可以有效地解决此问题,因为VBA会将已经定义过的变量名称产生在“属性/方法列表”中,允许用户录入变量名称的部分字符后通过快捷键调用“属性/方法列表”,从而方便用户通过选择的方式快速而准确地录入变量名称。因此,按以下步骤操作可简化代码的录入工作。

步骤1 单击菜单“插入”→“模块”,然后在模块中录入以下代码:

步骤2 在调用变量名称时,录入“pro”后按下快捷键调出“属性与方法列表”,如图1-2所示。■ 图1-2 使用调用变量的完整名称

步骤3 由于列表中默认选中的列表项为目标变量,所以直接单击空格,即可录入完整名称“ProductionData”。此方法可以提升代码的录入速度,而且能确保单词的准确性。

事实上,录入常量名称时也可以采用相同的方法,从而加快录入速度和准确性。

3.防止运算错误

对未定义的变量赋值时,VBA会判断值的属性,从而对变量自动分配适当的数据类型。然而,VBA的判断并非总是正确的,有时会因此造成计算结果错误,超出用户的预期值。

步骤1 在A1和A2单元格中分别录入10与20。

步骤2 按组合键进入VBE界面,单击“插入”→“模块”,然后在模块中录入以下代码:

步骤3 执行以上代码,将得到结果30,表示以上代码可以正确地执行求和运算。

步骤4 返回工作表界面,删除A1:A2的值,然后将A1:A2区域的单元格数字格式设置为“文本”。

步骤5 在A1:A2单元格分别录入10和20,然后返回VBE中,重新执行过程“求和”,执行结果是“1020”。

产生以上错误的根源在于VBA中的“+”运算符既可执行加法运算,又可执行连接运算,当“+”前后都是文本时,执行连接运算,有一个数值时则执行加法运算。本例中A1和A2如果意外地被修改为文本格式,或者数据通过某些ERP系统导出,导出的同时修改了单元格格式,那么过程的运算结果将会出错。如果正确地定义变量的数据类型,可以杜绝此类错误。

步骤6 在模块中录入另一个过程的代码,在代码中对变量正确地定义数据类型:

步骤7 执行以上过程,不管A1和A2单元格是什么格式,都能得到正确的合计值30。

4.创建提示信息

对于对象变量以及VbMsgBoxResult、Boolean这类变量,定义其变量类型后,为变量赋值时将会自动产生提示信息,根据提示足以判断变量名称的拼写方式是否正确,同时也能确保赋予的值在许可范围之内。按以下操作即可明白正确定义变量类型的重要性。

步骤1 单击菜单“插入”→“模块”,然后在模块中录入以下代码:

以上代码是错误的,错在对变量赋值时使用了许可范围以外的值。

通常,新手对VBA的内部常量不太熟悉,可能会误以为以上案例中Msgbox的可选值是“yes”和“no”,导致执行代码后无法实现需要的功能。如果对变量msg正确地定义类型,那么不需要记忆变量的可选值是什么,因为VBA会自动产生提示,对变量赋值时直接从列表中选择即可,既快捷,又能确保准确性,还可缩短学习时间,不必花时间记忆代码。

步骤2 重新录入过程代码,在代码中对变量正确地定义数据类型,那么在对变量赋值时将自动产生可选值的提示列表,效果如图1-3所示。■ 图1-3 定义变量类型后对变量赋值时自动产生可选值提示

在图1-3的状态下,直接从列表中选择目标可以确保赋值的正确性。

5.加快代码执行速度

不定义变量的数据类型时,VBA将变量当作变体型处理。变体型的变量将会占用更大的存储空间,同时也需要更长的调用时间。通过以下步骤可以比较正确地定义变量类型和不定义变量类型时的效率差异。

步骤1 单击菜单“插入”→“模块”,然后在模块中录入以下代码:

步骤2 执行以上代码,记录下它的运行时间。

步骤3 删除代码中定义变量与数据类型的语句,即包含“Dim”的那一行代码。

步骤4 执行修改后的代码,记录下代码的执行时间,并对两次的执行时间进行比较,将会发现不定义变量的数据类型时,代码执行时间要多出一倍以上。

↙原理分析

通过以上5个方面的比较分析,读者应该了解了定义变量的数据类型有何好处,以及定义变量类型后在执行效率上有何优势。

定义变量的数据类型有着如此优势主要基于两点:一是VBA在处理未定义数据类型的变量(即变体型变量)时总是先判断变量所代表的值的大小和类型,然后对该变量分配一个数据类型,接着再参与运算。而编程时人工指定数据类型的变量则省去了VBA为其分配数据类型的步骤,所以,在执行过程时,未指定变量类型的过程会在效率上落于下风;其二是VBA为指定了类型的变量开通了多个绿色通道,尽可能地为其提供便利,协助VBA用户快速录入变量名称,以及变量的属性或者方法。

因此,在工作中应尽量显式地声明变量、指定变量的数据类型,不要隐式声明变量。

↙ 知识扩展

※ 数据类型与对象类型 ※

变量的数据类型主要包含Byte、Boolean、Integer、Long、Currency、Decimal、Single、Double、Date、String、Object、Variant,其中,Variant是变体型,定义变量时可以忽略此类型。

广义的数据类型其实还包含对象变量的对象类型,常用的对象类型如表1-1所示。■ 表1-1 常用的对象类型

↘ 注意

本书每个疑难都提供案例文件,相关文件放入网站上,以“疑难N”命名(N为序号),与书中的疑难序号一致。读者可以直接打开文件进行学习,不需要手工抄写书中的代码。疑难2 公共变量和静态变量都有何用处

编程过程中常用的变量都是动态的,而且是过程级的私有变量。那么公共变量和静态变量在什么情况下需要用到呢?

→ 解决方案

公共变量和静态变量都有一个共同点——结束过程以后、关闭工作簿之前仍然保留变量的值。它们的不同点是公共变量可以被多个过程调用,而静态变量只能被变量所在过程调用。

本例通过两个过程分别展示公共变量与静态变量的特点和功能。

↙ 操作方法

1.公共变量应用:防止修改工作表名称

公共变量的作用是在多个过程之间传递信息,而禁止修改工作表名称则需要用到公共变量。使用代码禁止修改工作表名称其实不是真正的禁止修改,而且是在适当的时候还原名称,从而变相地实现需求。具体步骤如下:

步骤1 按组合键打开VBE窗口。

步骤2 在工程资源管理器中双击Thisworkbook,然后在其代码窗口中录入以下代码:

步骤3 返回工作表界面,修改任意工作表的名称,然后单击其他工作表,被改名的工作表将会瞬间恢复原本的名称。

2.通过自定义函数累加单元格中输入的所有数值

自定义函数可以获取一个单元格的值,或者对该值进行再加工,然后显示在公式所在单元格中。如果自定义函数配合静态变量使用,将会强大许多,可以逐一累加单元格中录入过的所有值。方法是通过Static关键字将Function过程转换成静态过程,从而将过程中的变量同步转换成静态变量,当过程结束后,可以保留变量的值,实现累加需求。具体操作步骤如下:

步骤1 单击菜单“插入”→“模块”,然后在模块中录入以下代码:

步骤2 返回工作表界面,在A1单元格录入数值10,在B1单元格录入公式“=total(A1)”,此时B1单元格的值等于10。

步骤3 将A1单元格的值修改为20,此时B1单元格的公式结果为30,表示A1单元格两次录入的数据之和是30,效果如图1-4所示。如果继续录入新值,公式将永远累加下去。■ 图1-4 利用自定义函数累加A1中录入的所有值

↙ 原理分析

※ 公共变量与静态变量的特点 ※

公共变量的特点是过程结束后变量的值不会消失(过程中使用了End语句人为释放变量的值时例外),继续保留过程中赋予变量的值,允许其他过程继续调用该值参与运算。因此,公共变量多用于多个过程之间传递信息。

静态变量的特点是过程结束后不会消失(过程中使用了End语句人为释放变量的值时例外),此过程再次执行时,可以调用变量的历史数值。本例中将Function过程通过Static关键字转换成静态过程,因此,自定义函数的值可以反复累加,不会在过程重新启动时以零值作为函数的初始值。

↙ 知识扩展(1)公共变量分为模块级公共变量和工程级公共变量,模块级公共变量只允许变量所在模块的过程调用,而工程级的公共变量则允许所有模块的所有过程调用。(2)静态变量属于过程级别的变量,不允许将声明静态变量的代码放在过程之外。(3)当使用Static关键字将过程转换成静态的过程时,过程中的所有变量都自动被转换成静态变量。1.2程序防错要点

一段好的程序需要满足四项需求:准确、快速、通用、防错,其中,计算结果准确是程序最基本的要求。

本节讲述如何让程序具有防错功能,从而当程序遇到某些允许的错误时可以继续执行下去,遇到某些不允许的错误时则提供足够的提示信息,通知用户修改执行方式。疑难3 常见的代码错误由哪些原因造成

程序错误包含编译错误和运行时错误,编译错误是指编写代码的过程中产生的且已被VBA侦测到的错误,运行时错误是指运行代码的过程中产生的错误。运行时错误共有几百种错误类型,那么常见的错误有哪些?如何防范?

→解决方案

常见的运行时错误包括“无效的过程调用或参数”、“子过程或函数未定义”、“对象不支持该属性或方法”、“下标越界”、“类型不匹配”、“参数不可选”、“溢出”和“错误的参数号或无效的属性赋值”等类型,错误的原因较多,本例将逐一分析这些错误的原因和防范方法。

↙ 操作方法

1.无效的过程调用或参数

当执行代码时提示“无效的过程调用或参数”,通常是因为对函数或者对象集合的参数赋值时使用了无效值。例如,以下两句代码的参数都属于此类错误:

其中,Cells对象集合不接受文本参数,代码中使用了文本“我”,因此出错;Sqr函数用于计算正数和0的平方根,不支持负数,因此,使用-5作为参数时会出现错误。

要避免此类错误,可通过帮助系统了解函数或对象的特性,赋值时尽量采用许可的值。

2.子过程或函数未定义

此类错误的原因在于被调用的函数或者过程不存在。而对“不存在”又可以细分为三种,其一是函数或者宏名称拼写有误;其二是被调用的函数或者宏代码在其他模块中,且已被声明为私有,从而不允许跨模块调用;其三是被调用的函数或者宏代码在第三方资源(例如DLL文件)中,要添加引用才可使用,例如,字典、FSO和正则表达式等都需要添加引用,否则不能直接调用其资源。例如,以下两句代码都属于此类错误:

其中,ramge和Msgbpx属于拼写错误,正确的写法是Range和Msgbox。

针对内置函数和对象名称,应该使用从列表中选择目标单词的录入方式,从而避免拼写错误。例如,输入“VBA.ms”后将弹出Msgbox的完整名称,输入“application.r”后将弹出Range的完整名称,如图1-5所示。■ 图1-5 通过提示信息选择函数或者对象名称

针对自定义的函数或者Sub过程,同样可以从提示中选择的方式代替手工录入,从而避免出错。例如,通过Call语句调整用过程“多工作表合并”时,可以录入“Call 多”后按下组合键显示提示信息,然后按下键或者空格完成录入工作。

3.对象不支持该属性或方法

此类错误通常由于属性或者方法拼写有误造成,也可能是理解有误,导致将另一个对象的方法或者属性应用到当前对象之上。例如,以下三句代码都属于此类错误:

第一句是误将“Insert”书写为“Insret”,而Range对象不具备此方法,因此出错;第二句是错在Range对象没有Caption属性,ActiveWindow和UserForm1之类对象才有,因此出错;第三句和第二句一样,调用了对象不存在的属性。工作表对象Worksheet有Name属性,窗口对象没有,因此出错。

此类错误比较好解决,尽量不手工录入属性或方法,从对象的属性与方法列表中选择目标即可,具体参考图1-6、图1-7。■ 图1-6 通过提示录入Insert■ 图1-7 通过提示判断是否存在Name属性

4.下标越界

此类错误通常是引用对象集合的子对象时参数超过了有效范围造成的。以下是两个最常见的“下标越界”错误案例。

当工作簿中只有3个工作表时,引用第15个工作表时将产生错误:

当不存在名为“上海调查表.xls”的工作簿,或者“上海调查表.xls”未打开时,引用此工作簿对象时将产生错误:

防范此类错误也比较简单,预先查看一下是否存在被引用的对象即可,也可以利用代码检查。例如,通过IF语句判断工作表的数量,符合条件时才执行代码,完整代码如下:

而对于第二种情况则可先防错,然后通过Err.Number的值判断是否执行成功:

5.类型不匹配

此类型错误常由对参数赋值时采用了不恰当的类型而引起。通过以下三个案例可以了解常见的“类型不匹配”出错。

Msgbox函数的第二参数只能使用数值,此处使用了文本,从而导致出错。

此句代码和上一句的出错原因一致,Comments也只支持数值参数。

此代码中变量a的数据类型被定义为Long型,那么只能对它赋值为数值,而代码中对它赋值为文本,因此出错。

防范此类错误的重点在于编写代码时如果拿不准赋值对象的类

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

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载