vba心得体会

时间:2022-05-03 22:30:23 心得体会 收藏本文 下载本文

vba心得体会(共20篇)由网友“老天保佑”投稿提供,下面是小编为大家整理后的vba心得体会,仅供大家参考借鉴,希望大家喜欢!

vba心得体会

篇1:vba心得体会

word学习心得

熟练的应用word也是当前社会必不可少的技能。从我开始接触word到现在我学会了不少的应用与操作,大部分操作命令能够熟练的使用。比如,从创建文档到编辑文档最后保存文档等基本操作。下面,我对自己这阶段的学习做以下总结:

1.表格制作及计算:

表格的制作可以手动绘制也可以自动生成,对于创建和编辑好的表格,如果对它们再做一些修饰,例如,进行边框的处理,或给部分单元格添加底纹,则会突出所要强调的内容或添加表格的美观性。在表格中还可以利用公式工具进行一些数据的计算与统计。

2.图文混排:

插入艺术字和图片以及文本框并进行修改美化。例如,环绕方式四周型、嵌入型等的运用,修改艺术字、图片以及文本框的字体颜色、大小、形状和边框等操作。

3.段落格式:

段落是两个段落标记之间的文本内容,是独立的信息单位,具有自身的格式特征。段落的格式化包括段落对齐、段落缩进、段落间距、添加分栏设置等。

4.设置页面版式:

在编辑文档时,直接用标尺就可以快速设置页边距、版面大小等,但是这种方法不够精确。如果需要制作一个版面要求较为严格的文档,可以使用“页面设置”对话框来精确设置版面、装订线位置、页眉、页脚等内容。页眉和页脚通常用于显示文档的附加信息,例如页码、日期、作者名称、单位名称、徽标或章节名称等。其中,页眉位于页面顶部,而页脚位于页面底部。word可以给文档的每一页建立相同的页眉和页脚,也可以交替更换页眉和页脚,即在奇数页和偶数页上建立不同的页眉和页脚。

excel学习心得

excel中的函数很多,功能也非常强大,如能掌握一些常用的函数,将给日常的数据处理带来很大的便利。本人认为想要学习excel至少要具备两个条件:一是兴趣,动力来源于些,万事皆准,大家都知道;二是耐心,毕竟有些东西还是不太好理解的,特别是刚接触这些英文表示的东西。如果具备了这两个条件,你已经成功了一半了!

能够愿意通过读书来学习excel的人,至少在目前阶段拥有学习的意愿,这一点是值得肯定的。面对日益繁杂的工作任务,他们宁愿加班加点,也不肯动点脑筋来提高自己的水平,偶尔闲下来就上网聊天,逛街看电视,把曾经的辛苦都抛到九霄云外去了。人们常说,兴趣是最好的老师,压力是前进的动力。要想获得一个积极的心态,最好能对学习对象保持浓厚的兴趣,如果暂时实在是提不起兴趣,那么请重视来自工作或生活中的压力,把它们转化为学习的动力。

下面是我总结了一些excel的优点:

1.excel的普及性

excel是个人电脑普及以来用途最广泛的办公软件之一,也是microsoft windows平台下最成功的应用软件之一。说它是普通的软件可能已经不足以形容它的威力,事实上,在很多公司,excel已经完全成为了一种生产工具,在各个部门的核心工作中发挥着重要的作用。无

论用户身处哪个行业、所在公司有没有实施信息系统,只要需要和数据打交道,excel几乎是不二的选择。

excel之所以有这样的普及性,是因为它被设计成为一个数据计算与分析的平台,集成了最优秀的数据计算与分析功能,用户完全可以按照自己的思路来创建电子表格,并在excel的帮助下出色的完成工作任务。

如果能熟练使用excel,就能做到一招鲜,吃遍天,无论在哪个行业哪家公司,高超的excel水平都能在职场上助您成功。2. excel的竞争对手

在电子表格软件领域,excel软件唯一的竞争对手就是自己。基于这样的绝对优势地位,excel已经成为事实上的行业标准。因此,您大可不必花时间去关注别的电子表格软件。即使需要,以excel的功底去学习其他同类软件,学习成本会非常低。如此,学习excel的综合优势就很明显了。

3. excel的兼容特性

excel一向具有良好的向下兼容特性,特别是自从进入97版本的成熟期以来,历经9年时间中3个版本的升级,每一次升级都能带来新的功能,但却几乎可以不费力的掌握这些新功能并同时沿用原有的功能。而且,这4个版本的功能有99%的部分都是通用的,文件格式也可以完全通用。

所以,无论你现在正在使用哪个版本的excel,都不必担心现有的知识会很快被淘汰掉。从这个角度上讲,把时间投资在学习excel上,是相当保值的。

篇2:vba心得体会

我不是IT专业人士,而是一位医务工作者,当初学习Excel VBA时,是因为读研究生时的课题需要:实验仪器每天产生4个Word文件,每个文件有9个表格,总计近百个数据。为了对这些数据进行统计分析,则需要将它们导入到一个Excel文件。当时老板让我坚持每天手工操作。我相当地厌倦这种枯燥的没有任何成就感的工作。

学习Excel、Word时,知道有个宏功能,可以实现办公自动化,仔细看了微软的介绍后,知道了“宏的另一种状态”,Visual Basic for Application,其简称也就是大名鼎鼎的VBA了,并且知道通过VBA可以在Office相应的组件间(如Excel、Word、PowerPoint)进行调用并读取所需的数据和信息。感叹于VBA的神奇功能,当时就有学习VBA的冲动,因学业的原因,一直没有付诸行动,直到课题需要时,终于决定开始学习VBA。

于是,到书店买了一本VBA教程,看了段时间后感觉不行的,貌似看懂了,但却不会用,对于如何将Word中的数据导入到Excel中更是一点头绪都没有。接着又到书店开始寻找VBA方面的书籍,先后买了两三本吧(当时关于VBA的书籍并不是很多,好在上海在书籍销售方面还是很发达的,二、三线城市估计就没这个优势了),甚至买了本带“准互动式”视频(当时的叫法是多媒体)教学光盘的VBA教程书,看了后仍是丈二和尚的感觉。个人认为,这本带视频光盘的书籍是最会挖坑的,售价也非常高,而里面多媒体教程只是一些视频演示,可以快进或快退,于是就敢称“互动式”视频了!当然,这些“多媒体”最差劲的是演示了半天仍不知其所以然,好像不是在教大家学习VBA,而更象是展示自己的视频制作得如何出色。

如是折腾几次后,都准备放弃学习了,想花钱请人写个VBA程序来解决问题。在放弃前,再一次去了书店,遇到一本面向大专生的VBA教程。当时自己暗暗地想,我已经达到了研究生的水平,如果连大专生的教程都看不懂,真应该去撞豆腐了!于是,买了下来。可喜的是,终于看懂了,并很快就入门了。然后,开始着手编写课题所需要用的VBA程序,并很快完成。看着电脑在那不知疲倦地打开一个个的Word文件,然后把数据导入到Excel中,真的是一种享受!

能简单地使用VBA后,就一直喜欢用它来处理些问题,有时,感觉写VBA代码所耗费的时间要比单纯地手工操作多很多,但因为写好代码后的那种成就感的支撑,自己还是一点点地写了些VBA代码,这些代码主要帮师弟师妹们处理下他们课题中的数据,没有太复杂的操作。

移民加拿大后,发现很多中国人都改行做了会计,每天都和Excel条交道,其中一些人是迫切地想学习VBA。但他们也面临着当初我所面临的问题:看了书后仍旧觉得无所适从,有些人没有看中文的VBA教程,直接到图书馆借的英文版的,看后更是觉得头大。会计在实际工作中面临着大量的重复的枯燥的操作,数百页,甚至是上千页的VBA教程(有个会计下载了本英文版的VBA教程,1200余页),对他们来说就是手持宰牛刀准备杀鸡时,却感觉使不上力!而且因为生活工作繁忙,他们很难如学生那样静下心来花费大量的时间去学习VBA。他们主要是使用录制宏的功能产生一段代码,然后试图网卡检索或翻看相应的书籍来搞明白这段代码的含义。因为没有相应的编程基础和观念,这样做的结果并不是非常地理想。

知道我略懂VBA后,有些人向我请教,也辅导过一些人学习VBA。在这个过程我渐渐地明白了他们所面临的问题,与当初我所面临的一样:看了很多资料后,面对具体问题感觉仍旧是无所适从。而且我辅导过的人年龄都偏大,工作生活等都非常繁忙,没有太多的精力,也没有太多的时间静下心来学习VBA,他们都希望以“短平快”的方式快速地掌握基本的VBA技能,而不是成为这方面的高手。刚开始辅导时,大家坐在电脑前,一边讲一边在电脑上演示,后来,在第一次辅导时,连电脑都不用了,一支笔几张纸,一边讲一边在纸上写写画画地就可以的。因为他们迫切需要知道的不是如何写VBA代码,而是需要了解VBA的编程思路。经过2到3次辅导(大约5-6小时),他们就基本掌握了VBA的编程方法和思路,余下的,就是在实际工作中的自学和实践了。

近来笔者有些空闲时间,于是,决定把当初自己学习和辅导他人学习VBA的一些感受和经验写下来,以帮助有这方面需求的非IT专业人士。本总结所面对的读者是能熟练地操作Excel的人,而不是Excel的初学者。

篇3:vba心得体会

学习VBA心得体会---感谢各位老师

从10月18日到普洱思茅开会之际在思茅新华书店购得《Excel VBA高效办公从入门到精通》一书以来,到今天月28日止,已有一个多月了,一个月来,每天白天黑夜无日无夜地为VBA痴迷,曾记得好几天深夜睡不着觉就起来学VBA走到通宵,从一个对VBA一无所知的人到现今狼吞虎咽地看完了这本书,曾试着编写代码,但皆告失败,失败的原因就是还需要反反复复地研读这本书,把VBA再做更深一步的研究,因为感觉VBA的博大精深和实际工作中超强的功能,正适合我的工作、理想、口味的需要。

天龙八部中的慕容复曾说,博天下不如精一门,不管是工作的实际应用,还是运用在彩票研究、还是网页的制作、还是以后的软件开发方面的发展,练好基本功是首要,而这个基本功就是VBA。

电脑我已运用了10多年,从91年进入昆明地校入校学习,94年开始接触电脑,依稀还记得当时学习电脑知识时的那种疯狂劲,从学习键盘打字到五笔到学习Basce、Pascal、汇编等语言,学习时的那种吃力,学过后就象没有学过一样,交作业、考试也不知道怎么及格的,加之英语在班里我是最差的,每次老师提问时我都是胆战心惊的,最怕英语课,真羡慕英语基础比我好的同学,电脑课倒是不怕,因大家都一样一起起步,总之,那时对电脑的学习就是大脑发昏而热情高涨,只要是学校图书馆里的电脑书刊、书报都要借(会看不会看另外再说),只要周末有事无事都要去圆通山电子一条街去跑,只要感觉好一点的电脑书都要买(不管明天生活费还有没有),其实这些用父母血汗钱买来的书真贵,什么汇编大全、Basic、 FoxBase大全啊等等,主要是我看不懂,似懂非懂,没有多大的用处。

从95年参加工作以来,我对电脑的热情依然不减,除了刚工作前3年在乡政府工作没有电脑学习外,当时我也订了《电脑报》、《计算机大世界》等,每年有半个月的工资是订报的。但其实还是没有学到有用的东西。

直到调入到县统计局以来,每天几乎都在用电脑,终于实现了我用电脑的梦。可以说这10多年来一直用电脑,主要是用电脑来打印单位的材料、上网查资料、看电影电视玩游戏下载软件等等,无数次对电脑的安装、作系统、软件的运用,可能说,感觉自己已对Windwos系统的运用已经熟得不能再熟了,在单位里也算是师一级的人物了,但只能说是应用,对注册表等还是一知半解的,真是汗颜哪!!明明知道软件开发是个好东西,但不知道从何入手,试着从网上下载一些软件学习,如“易语言”、“Basic”、“Html语言”等,都以失败告终,不知是兴趣原因还是经常不用,学过就忘了,而学习汇编、C++、FoxBase、FoxPro等语言又感觉好难,不敢问津。

是我第一次接触Excel,当是我只会叫“电子表格”,别人叫“依可赛儿”我都听不懂,因以前我用CCED做电子表格(学校里学的),并用CCED作了单位里的第一本书《统计年鉴》,此后《统计年鉴》一书也是用CCED排版的,20我通过自己学习和同事交流,学习用Excel2003来排版《2003年统计年鉴》,一直在此格式上调用修改来编排、、、、的统计年鉴,从2003年到年10月,我的技术就停留在了用Excel来划田字制表格这样的级别里,对“宏”这个工具栏里的东西一无所知,神秘而又神秘,心想,反正也没有用又不会用,管他的,可能是Excel开发者用的工具吧。

2009年8月--9月,我感觉我的Excel学平不如别人了,感觉只要我会的单位里的同事都会用,没什么稀奇的,我试着从www.excelhome.net/网站下载一些Excel、Word的视频教材,不看不知道,一看吓一跳,原来我不懂的东西竟然这么多,我的水平初级了不能再初级、菜了不能再菜。连“汉字排序”、“数据筛选”这些功能都不知道,“透视表”就不用说了,听视频里的老师讲,Excel水平到了一定地步,就要学VBA,VBA才是分析数据的灵魂,也是集可视化功能,编程最简单的入门程序。

我的学习热情又开始高涨了,天啊,原来我苦苦寻找的“降龙十八掌”、“易筋经”、“六脉神剑”、“独孤九剑”原来就是VBA!!!

其实让我对VBA热情不减的原因还是因我经常(几乎每天)都要用到Excel,就不自而然地打开了VBA,VBA有如Windows一样的稳固的操作平台(Excel),而Basic有平台,但不像Windows平台一样只要是启动电脑就有,如Visual Basic6.0需购买或下载安装。

从2009年8月起,我从网络上疯狂地下载学习Excel和VBA相关入门的材料,但下载了一大堆材料又犯难了,看到网络上的老师苦口婆心地讲“从菜鸟入门手把手地教”,但还是难于入门。

怎么办哪,参加电脑软件学校学习是不可能的,没有时间金钱,但可以肯定的是,不出一点钱是学不到真功夫的。

所以下定决心,若到思茅,一定要到新华书店买一本VAB方面的书。正巧2009年10月18日到思茅开会,大清早书店不会门就在门口等了1个多小时,书店10点钟开门后查找了一个多小时,终于找到我这本书《Excel VBA高效办公从入门到精通》,顺带买了《木马大全》这本书。

今天我做此语录的目的,其实最终还是为了进一步学好VBA,也可以说是我学习电脑和VBA的一个小节吧,以此来激励自己,把看书、与电脑操作同步进行,把学习心得用电脑Excel方式记录下来,以便以后反复地研究学习,加深映象,不至于学过就忘。

篇4:vba心得体会

经常在网站的BBS上看到类似于“我想学VBA,但不知从何处着手?”、“VBA该怎样学”等贴子,对我初学者来说感受很深。我对VBA很感兴趣,可能也看到了VBA程序所展示的强大的功能,很想学习VBA,急于了解并运用它,可是总是会碰到这样或者那样的问题。有时,往往学习了好长一段时间,还是摸不清头脑。例如,很简单的一段代码,书上是这样写的,我输入的也没错啊,可是为什么调试总会出错呢?为什么自已看起来很复杂的问题,别人用一小段代码就轻轻松松的解决了呢?看了一些VBA入门的书和VBA编程书,可为什么还是写不出有效的代码呢?其实,这都是对VBA不熟悉的缘故。俗话说,“万事开头难”,当您入门了,就会逐渐变得容易起来。再回过头来,想想刚学习的时候碰到的问题,简直就觉得很简单。这时,随着对它了解的深入和理解程序的加深,会觉得越来越顺了,同一个问题,会有好几种方法来实现,程序调试也顺利了,即便出现了错误,也知道该如何修改了。

学习并理解直至运用一门知识是需要花费时间和精力的,需要热情和坚持,但这还不够,为了避免少走弯路,掌握一些学习的方法和技巧,还有这门知识的特点和主线,快速的进入这门知识的殿堂。下面就自已对VBA的理解和认识。经过这一阶段的学习和研究,自已觉得ExcelVBA基础知识体系基本上由编程语法和对象模型两大部分组成。

第一部分是编程的语法。与其它的程序设计语言一样,VBA也有基本的数据类型和程序的基本语句结构,例如IF…Then语句结构、For…Next语句结构等,并且VBA有其特有的数据类型,如Object类型,以及特殊的语句构造,如With…End With语句、For Each…Next语句。此外,子过程和函数过程也有它们自身的特点,如传递参数和返回值的规则、调用方式等。一般来说,语法是基础。在学习VBA程序设计的语法时,除理解一般程序设计语言所通用的语法特点外,要重点关注VBA特有的语法及其规则。

第二部分是Excel的对象模型,这是ExcelVBA编程的核心。Excel本身是由对象结成的,您使用VBA对Excel进行操作,就是对Excel的对象的操作。在这里,您要学习Excel对象的方法、属性和事件,首先要理解对象、方法和属性之间的关系。Excel的对象模型提供了大量的对象,您想一下子学习并理解这么多对象及它们的成员是不可能的,可能绝大多数人都不可能。但事情往往是这样的,一门知识虽然包含的东西很多,但经常使用的总是那其中的一些知识点。因此,您可以先对其中经常使用到的对象(如上图所示)进行研究、深入的学习和理解。通过这种方式,逐步加深您对Excel对象模型的认识,从而渐渐地掌握和灵活运用Excel的对象模型。

最后,通过上述两部分的组合,就形成了VBA程序。也就是说,当您理解和掌握了VBA程序设计的基本语法和Excel的对象模型之后,通过使用VBA语法控制和操作Excel对象,一系列的指令就组成了ExcelVBA程序。当程序按照您的需求进行设计时,它就完成了对Excel进行自动化操作的功能,或者是增强了Excel原有的功能,或者是实现了Excel原来没有的功能。

在进行学习的过程中,会慢慢的熟悉Excel自带的VBE编程环境,也会了解程序调试的相关知识,知道如何处理错误等。在学习的过程中,充分的利用VBA的帮助系统和对象浏览器,解决在学习过程中出现的疑难,同时,也丰富了自己的知识。

另外,还要多看看VBA程序,并自已着手分析,对所学的知识进行归纳和总结,这是非常有利于迅速提高水平。

学好VBA的方法很多:一是掌握最好的方式就是使用,从基础学起,多练习多动脑筋。二是通过示例可以加速学习程序设计概念的过程。三是好的教材和示例是提高的得力助手。 四是实用程序不一定很复杂,有一些最有用的实用程序实际上非常简单。 五是切合实际,学习VBA就会更快。起先很难掌握VBA,但是具体的实践会使其简单很多;试验是掌握VBA的关键;Excel几乎可以做任何事情;加强对VBA源代码的学习,特别是高质量源代码的学习。

篇5:vba心得体会

1. 使用 VBA 的前提:

Excel 要保存成 .xlsm 格式

2. 应用 VBA 的原因:

满是公式的 Excel 表格不注意删除一两个公式就会毁掉整个心血。

不想把自己辛辛苦苦整理好的 EXCEL 带着公式一起发给别人,做了好久的公式,就这样被别人轻松拿到。用了 VBA ,点击 F5 运行完公式,文件另存为 .xlsx 格式再发给别人,他得到的就只是一堆数据而已。没有任何加工痕迹,你的思路也不会被窃取。

节约时间。我虽然不是财务部门的,但是每个月也是处理很多相同的数据。或者是把很多相同模板的数据归集到一个总表。虽然可以一个个的复制,但是太浪费时间了。所以我就写了一个代码,把收到的所有 EXCEL 放到一个文件夹,再创建一个总表,运行代码,将所有 excel 复制到总表中。我的 excel 有 20 几个,平均每个 1MB 。不到 30 秒就汇总进总表中,而且每个 sheet 的名字也编好了。

总而言之,你觉得想学点什么打发时间 + 每个月还是有些数据需要归集 + 不想把自己辛辛苦苦写了好久的公式和 EXCEL 一起发给别人。学习VBA 还是一个不错的选择。

3. VBA 规则

Alt F11 打开 VBA 编辑器

立即窗口,本地窗口,工具条都可以在工具栏找到。立即窗口可以按住鼠标左键拖出来使用,也可以双击左键镶嵌到 VBA 编辑器中。

F8 调试,就是一行一行的过。如果你写了好几个模块,调试的时候总是跳到其他模块,点一下“工具栏第二行的小方块”,就在一把三角板的左面。这个小方块也是从头调试的意思。

F5 运行

4. VBA 编写

--- 开头第一句:

Sub 代码名称

Private sub worksheet_change() 这种 worksheet 的只能编辑到 sheet 里。不能写在模块里。双击 sheet1 ,直接在里面写,就可以运行。

--- 对变量进行定义:

Integer, string, range, worksheet, workbook

--- 单元格表示方法: cells, range , []

A1 单元格表示方法:

[a1] / [A1]

Cells(1,1)

Cells(1, “ A ” )/cells(1, ” a ” )

Range( “ a1 ” ) / range( “ A1 ” )

A1~B5 区域表示方法:

[A1:B5] /[a1:b5]

Range( “ a1:b5 ” ) /range( “ a1 ” , ” b5 ” ) / range ( “ a1:b ” & 5)

--- 工作表 & 工作簿表示方法:

Sheet1 : VBA 项目栏对应的 Sheet1

Sheets(1)/ worksheets(1): excel 中第一个 sheet

Sheets( “工作表名字” )

Workbook1/ workbooks(1) /workbooks( “ 1.xlsx ” ) 此处千万不要忘记 .xlsx !!!

--- 常用逻辑

If … /else(else if ) … /end if

循环 for … to … /next

循环 for each … /next

循环 do until loop

循环 do while loop

--- 常用跳过错误语句

Application.displayalerts=false (false 语句基本在第二行代码就用, true 在倒数第二行用 )

On error resume next( 你觉得哪条语句需要跳过错误就在它的后面写一句 )

放上我自己编的例子,大家一起进步!网站有的例子我就不放了。放自己写的,希望能帮上别人的。

1. excel 开机密码。 5 次错误自动关闭

2. 隐藏所有工作表( =1 是取消隐藏)

3. 单元格变颜色

4. VBA change 函数的使用方法。之前一直在模块里面编代码,不能运行,不能调试。百度了好久终于找到原因了。就是 Worksheet 开头的不管是 Change 还是 selectionchange, 一定要在 sheet 下面编辑!!!双击 sheet (黄色部分),开始写代码。既能调试又能运行。

篇6:什么是VBA

VBA是什么?VBA是Visual Basic for Application的简写,它以VB语言为基础,经过修改并运行在Microsoft Office的应用程序,如Excel,Word中,它是不能像VB一样能生成可执行程序的,

什么是Excel应用程序?利用Excel和VBA为平台,开发出来的电子数据表即称Excel应用程序。

什么是宏?宏是一系列的命令与函数,存储于 Visual Basic 的模块中,并在在需要执行该项任务时可随时运行。如果经常在重复某项任务,那么可以用宏自动执行该任务。

上面是VBA的三个概念,那为什么要用VBA?为什么要以Excel为平台来开发程序?

这里说几个简单的理由!

1、当使用Excel为平台时,你的程序就可以利用Excel现有的功能,可以站在一个小巨人的肩膀上,这就可大大减少开发的周期,

2、几乎所有的电脑中都有Excel,也有大量的人正在使用Excel,但并不是每个人都会使用VBA,当你了解VBA后,以前的很多问题就可能在这就迎韧而解。

3、Excel开发程序分发很容易,只要电脑中有Excel,基本不需要在其它的文件,简简单单的复制与粘贴,就完成了文件的分发。

4、VBA的语言是相对容易学的语言,很容易上手,如果你熟悉VB,那你发现它们在语言方面是相通的,而如果你对Excel比较了解,那你也就很容易理解Excel的各种对象了。

最后,任何东西都不是万能的Excel与VBA也是一样。

如,Excel是一个电子表格程序,如果你把它强加成数据库软件是不公平的,在处理较少的数据,比如几千行的,用Excel是比较理想的,而大量的数据时,你就应该考虑用数据库了,比如Microsoft Office中的Access等,或者将两个相结合。

充分了解Excel的基本知识与VBA的编程技巧,你就会从中获得乐趣,让我们一起来吧,走进VBA的世界中。

篇7:VBA for Access 学习

一课 常用的几个基本概念

学VBA,先要了解几个基本概念,这些概念一开始看一定会有点晦涩难懂,不过看不明白也没关系,在后面慢慢你会了解它们的含义,先大概了解一下它们的定义。

1、变量(Variable)

命名的存储位置,包含在程序执行阶段修改的数据。每一变量都有变量名,在其范围内可唯一识别。可以指定变量的数据类型,也可不指定。

变量名必须以字母或字符开头,在同一范围内必须是唯一的。比如你在一个过程中定义了一个变量名为strMsg,在这个过程中就不能定义第二个名为strMsg的变量。变量名不能超过255个字符,而且中间不能包含句点或类型声明字符。

用一句话概括:变量就是在程序运行中的一个可改变的值。

2、常量(Constant)

执行程序时保持常量值的命名项目。常量可以是字符串、数值、另一常量、任何(除乘幂与Is运算之外的)算术运算符或逻辑运算符的组合。可在代码中的任何地方使用常量代替实际的值。

用一句话概括:常量就是在程序运行中的一个不可改变的值

3、声明(Declare)

不可执行的代码。它命名常量、变量或过程,并且指定其特性,如数据类型。对于DLL procedures,声明指定名称、库和参数。比如你要在程序中使用变量或常量,就要先声明它。如:

dim strMsg as string '声明一个名为strMsg的局部字符串变量。

不同的声明语句表示所声明对象的作用域:

名称作用域          声明位置        使用语句

局部过程            过程中          Dim或Static

模块级窗体及模块      模块的声明部份  Dim

全局整个应用程序    模块的声明部份  Public或 Global

4、过程(Procedure)

命名的语句序列,可作为单元来执行,

例如,一个按钮的单击事件是一个过程,一个函数也是一个过程。

5、模块(Module)

一组声明集合,其后为过程。

6、数据类型

数据类型体现了数据的结构的特点。VBA提供的基本数据类型主要有字符串型数据和数值型数据。此外还提供了货币、对象、变体等数据类型。

上面这些只是一些常用的概念,如果想了解更多,也可以找一些VBA或VB的书来看看。

第二课 加法运算

在编程当中,文本框及按钮是用得比较多的一个控件,我们先来学学如何使用这两个控件。

1、新建一个窗体

2、在窗体上放置三个文本框控件,分别命名为:txtNum1、 txtNum2、txtNum3,我们在命名时,尽量规范一点,可参考这里:www.officefans.net/cdb/viewthread.php?tid=554

3、在窗体上放置一个按钮,命名为cmdCount

开始编程:我们来作一个加法运算。

在按钮”cmdCount”的单击事件里输入以下语句:

txtNum3 = txtNum1 + txtNum2

在这里我们再来简单了解一下什么叫对象及事件:

1、对象:

对象是具有特殊属性(数据)和行为方式(方法)的实体,建立一个对象后,其操作通过与该对象有关的属性、事件和方法来描述。在这里按钮”cmdCount”是一个对象,那三个文本框也分别是三个对象。

2、事件:

是由VBA预先设置好的,能够被对象识别的动作。例如按钮就有:Click(单击)、DblClick(双击)等事件。我们上面的那条语句就来响应该按钮的单击事件,每当该按钮被单击时,就会运行一遍我们的程序。

上面这条语句输完后,程序里的全部语句是这样的:

篇8:VBA循环语句

语句除了判断语句外,还有循环语句,有以下几种形式:

1、While...Wend 语句,语法 :

While condition

[statements]

Wend

While...Wend 语句的语法具有以下几个部分:

部分 描述

condition必要参数。数值表达式或字符串表达式,其计算结果为True 或 False。如果 condition 为 Null,则condition 会视为 False。

statements 可选参数。一条或多条语句,当条件为True 时执行。

2、Do...Loop 语句。语法:

Do [{While | Until} condition]

[statements]

[Exit Do]

[statements]

Loop

或者可以使用下面这种语法:

Do

[statements]

[Exit Do]

[statements]

Loop [{While | Until} condition]

Do Loop 语句的语法中的参数说明以上面相同,不重复了。

3、 For...Next 语句。 语法:

For counter = start To end [Step step]

[statements]

[Exit For]

[statements]

Next [counter]

For…Next 语句的语法具有以下几个部分:

部分 描述

counter 必要参数,

用做循环计数器的数值变量。这个变量不能是 Boolean 或数组元素。

start 必要参数。counter 的初值。

End 必要参数,counter 的终值。

Step 可选参数。counter 的步长。如果没有指定,则step的缺省值为 1。

Statements 可选参数。放在 For 和 Next 之间的一条或多条语句,它们将被执行指定的次数。

4、For Each...Next 语句。语法

For Each element In group

[statements]

[Exit For]

[statements]

Next [element]

For...Each...Next 语句的语法具有以下几个部分:

部分 描述

element 必要参数。用来遍历集合或数组中所有元素的变量。对于集合来说,element 可能是一个 Variant 变量、一个通用对象变量或任何特殊对象变量。对于数组而言,element只能是一个 Variant 变量。

group 必要参数。对象集合或数组的名称(用户定义类型的数组除外)。

statements 可选参数,针对 group 中的每一项执行的一条或多条语句。

篇9:VBA判断语句

前面说了代码中三大元素中的变量与运算符,现在说一下语句中的判断语句,判断语句有下面几种形式:

1、If condition Then [statements][Else elsestatements],

其中各部份的说明:

部分 描述

condition 必要参数。一个或多个具有下面两种类型的表达式:

数值表达式或字符串表达式,其运算结果为True或 False。如果 condition 为 Null,则 condition 会视为 False。

TypeOf objectname Is objecttype 形式的表达式。其中的 objectname 是任何对象的引用,而 objecttype 则是任何有效的对象类型。如果 objectname 是 objecttype 所指定的一种对象类型,则表达式为 True,否则为False。

statements 在没有 Else 子句时,为必要参数,否则为可选。它们在condition 为True 时执行。

elsestatements 可选参数。它们在前面的 condition 或 condition-n 都不为 True 时执行。

2、 If condition Then

[statements]

[ElseIf condition-n Then

[elseifstatements] ...

[Else]

[elsestatements]]

End If

其中各部份的说明:

部分 描述

condition 必要参数。一个或多个具有下面两种类型的表达式:

数值表达式或字符串表达式,其运算结果为 True 或 False。如果 condition 为 Null,则 condition 会视为 False。

TypeOf objectname Is objecttype 形式的表达式。其中的 objectname 是任何对象的引用,而 objecttype 则是任何有效的对象类型。如果 objectname 是objecttype所指定的一种对象类型,则表达式为 True,否则为False。

statements 可选参数。一条或多条以冒号分开的语句,它们在 condition 为 True 时执行,

condition-n 可选参数。与 condition 同。

elseifstatements 可选参数。一条或多条语句,它们在相关的 condition-n 为 True 时执行。

elsestatements 可选参数。一条或多条语句,它们在前面的 condition 或 condition-n 都不为 True 时执行。

3、IIf 函数。IIf函数不是语句,但由于可以代替If…Then,就将它总结在这里,其语法如下:

IIf(expr, truepart, falsepart)

其中各部份的说明:

部分 描述

expr 必要参数。用来判断真伪的表达式。

truepart 必要参数。如果 expr 为 True,则返回这部分的值或表达式。

falsepart 必要参数。如果 expr 为 False,则返回这部分的值或表达式。

4、Select Case testexpression

[Case expressionlist-n

[statements-n]] ...

[Case Else

[elsestatements]]

End Select

其中各部份的说明:

部分 描述

testexpression 必要参数。任何数值表达式或字符串表达式。

expressionlist-n 如果有Case 出现,则为必要参数。其形式为 expression,expression To expression,Is comparisonoperator expression的一个或多个组成的分界列表。To 关键字可用来指定一个数值范围。如果使用 To 关键字,则较小的数值要出现在 To 之前。使用 Is 关键字时,则可以配合比较运算符(除 Is 和 Like 之外)来指定一个数值范围。如果没有提供,则 Is 关键字会被自动插入。

statements-n 可选参数。一条或多条语句,当 testexpression 匹配expressionlist-n中的任何部分时执行。

elsestatements 可选参数。一条或多条语句,当 testexpression 不匹配 Case 子句的任何部分时执行。

篇10:VBA 编程基础

作者: 字体:[增加 减小] 类型:

好多朋友想学习vba但相关资料不是很多,其实就是利用了vb的语法,结合office

11.3.1 了解 Visual Basic 语法

本节解释最常见的语法元素,

11.3.1.1 Activate 方法的语法

语法:object.Activate

在 Activate 方法的语法中,object 是一个所提供信息的占位符,在此例中的代码会返回一个对象。例如,下面的过程会在活动的文档中激活第二个窗口。

Sub MakeActive

Windows(2).Activate

End Sub

11.3.1.2 MsgBox 函数的语法

语法:MsgBox(prompt[, buttons] [, title] [, helpfile, context])

在 MsgBox 函数的语法中,括号内的参数是此函数的命名参数。方括号所包含的参数是选择性的(在Visual Basic 中不用键入方括号)。在 MsgBox 函数中,唯一必须提供的参数(prompt)是做为提示的文本。

在代码中可以利用位置或名称来指定函数与方法的参数。若利用位置来指定参数,则必须根据语法中的顺序,利用逗号来分隔每一个参数,例如:

MsgBox “Your answer is correct!”,0,“Answer Box”

若以名称来指定参数,则须使用参数名称或跟着冒号与等号(:=),最后再加上参数值。可以任何的顺序来指定命名参数,例如:

MsgBox Title:=“Answer Box”, Prompt:=“Your answer is correct!”

函数以及某些方法的语法会利用圆括号将参数封闭起来。这些函数和方法会返回值,所以必须用圆括号将参数封闭起来,才可以赋值给变量。如果忽略返回值或是没有传递所有的参数,则可以不用圆括号。方法若不返回值,则不用将参数用圆括号封闭起来。上述准则不管是使用命名参数或位置参数都适用。

在下面的示例中,MsgBox 函数的返回值是一个号码,它被存储在变量 myVar 中,以用来指示选择的按钮。因为需要用到返回值,所以调用时必须使用圆括号。而另一个消息框则是用来显示变量的值。

Sub Question()

myVar = MsgBox(Prompt:=“I enjoy my job.”, _

Title:=“Answer Box”, Buttons:=“4”)

MsgBox myVar

End Sub

11.3.1.3 选项语句的语法

语法:Option Compare {Binary | Text | Database}

在 Option Compare 语句的语法中,大括号和垂直线指示三项中的强制性选择(在Visual Basic 的语句中不用键入大括号)。例如,下列的语句指出在模块中,字符串的比较是根据文本的排序顺序而不区分大小写。

Option Compare Text

11.3.1.4 Dim 语句的语法

语法: Dim varname[ ( [subscripts] ) ] [As type] [, varname[([subscripts])] [As type]] . . .

在 Dim 语句的语法中,Dim 是必备的关键字。而唯一必备的元素是 varname(变量名)。例如,下列的语句创建三个变量:myVar、 nextVar 和 thirdVar。它们会自动被声明成 Variant 变量。

Dim myVar, nextVar, thirdVar

下面的示例声明了一个String 型的变量。它包含了数据类型,如此可以节省内存并且可帮助从代码中找出错误。

Dim myAnswer As String

若在一个语句中声明好几个变量,则必须包含每一个变量的数据类型。变量在声明时若少了数据类型,则会自动地声明为Variant 。

Dim x As Integer, y As Integer, z As Integer

在下列的语句中,x 与 y 都被指定成 Variant 数据类型,只有 z 被指定成 String 数据类型。

Dim x, y As Integer,Z As String

如果声明一个数组变量,则必须包含圆括号,但下标则是可选的。下列的语句中定义了一个动态数组 myArray。

Dim myArray()

11.3.2 有效地利用数据语法

表11-1 列出VBA 所支持的数据类型,以及存储空间的大小与范围。

注意:

任何数据类型的数组都需要 20 个字节的内存空间,加上每一数组维数占 4 个字节,再加上数据本身所占用的空间。数据所占用的内存空间可以用数据元数目乘上每个元素的大小加以计算。例如,以 4 个 2 字节的Integer 数据元所组成的一维数组中的数据,占 8个字节。这 8 个字节加上额外的 24 个字节,使得这个数组所需总内存空间为 32 个字节。包含一数组的 Variant 比单独的一个数组需要多 12 个字节。

注意:

使用 StrConv 函数把字符串数据从一种类型转换为另一种类型。

除非有其他的指定,否则未声明变量会被指定成 Variant 数据类型。这个数据类型可使写程序变得较容易,但它并不总是使用中最有效率的数据类型。

若有下列情形时必须考虑使用其他的数据类型:

程序非常大并且使用很多变量。

程序的执行速度必须尽可能得快。

将数据直接写到随机存储文件中。

除了 Variant 之外,支持的数据类型包括 Byte、Boolean、 Integer、Long、Single、Double、Currency、Decimal、Date、Object 以及 String。可使用 Dim 语句去声明一个指定类型的变量,例如:

Dim X As Integer

上述语句声明变量 X 是一个整型,其范围介于-32,768~32,767 之间。如果试着去设置超出此范围的数值给 X ,则会有错误发生。如果试着去指定一个分数给 X,则此分数会自动四舍五入。例如:

X = 32768 ‘ 产生错误。 X = 5.9 ‘ 设置 x = 6。

11.3.3 Visual Basic 的命名规则

当在 Visual Basic 的模块中为过程、常数、变量以及参数命名时,可以使用下列的规则:

第一个字符必须使用英文字母。

不能在名称中使用空格、句点(.)、惊叹号(!)、或 @、&、 $,# 等字符。

名称的长度不可以超过 255 个字符。

通常,使用的名称不能与 Visual Basic 本身的 Function 过程、语句以及方法的名称相同。必须退出使用与程序语言的关键字相同的名称。若所使用的内在语言函数,语句或方法与所指定的名称相冲突,则必须显示地识别它。常规会将内建函数,语句或方法的名称之前加上关联的类型库的名称。例如,如果有一个名为 Left 的变量,则只能用 VBA.Left 来调用 Left 函数。

不能在范围的相同层次中使用重复的名称。例如,不能在同一过程中声明两个命名为 age 的变量。然而,可以在同一模块中声明一个命名为 age 的私有变量和命名为 age 的过程级别的变量。

注意:

Visual Basic 不区分大小写,但它会在名称被声明的语句处保留大写。

11.3.4 声明变量、常数和数组

11.3.4.1 声明变量

通常会使用 Dim 语句来声明变量。一个声明语句可以放到过程中以创建属于过程的级别的变量。或在声明部分可将它放到模块顶部,以创建属于模块级别的变量。

下面的示例创建了变量 strName 并且指定为 String 数据类型。 Dim strName As String

如果该语句出现在过程中,则变量 strName 只可以在此过程中被使用。如果该语句出现在模块的声明部分,则变量 strName 可以被此模块中所有的过程所使用,但是不能被同一工程中不同的模块所含过程来使用。为了使变量可被工程中所有的过程所使用,则在变量前加上 Public 语句,如以下的示例:

Public strName As String

变量可以声明成下列数据类型中的一种:Boolean、Byte、 Integer、Long、Currency、Single、Double、Date、String(变长字符串)、String * length (定长字符串)、Object 或 Variant。如果未指定数据类型,则 Variant 数据类型被赋予默认。也可以使用 Type 语句来创建用户自定义类型。

可以在一个语句中声明几个变量。而为了指定数据类型,必须将每一个变量的数据类型包含进来。在下面的语句中,变量 intX、 intY、与 intZ 被声明为 Integer 类型。

Dim intX As Integer, intY As Integer, intZ As Integer

在下面的语句中,变量 intX 与 intY 被声明为 Variant 类型;只有intZ 被声明为 Integer 类型。

Dim intX, intY, intZ As Integer

在声明语句中,不一定要提供变量的数据类型。若省略了数据类型,则会将变量设成 Variant 类型。

使用 Public 语句:可以使用 Public 语句去声明公共模块级别变量。

Public strName As String

公有变量可用于工程中的任何过程。如果公有变量是声明于标准模块或是类模块中,则它也可以被任何引用到此公有变量所属工程的工程中使用。

使用 Private 语句:可以使用 Private 语句去声明私有的模块级别变量。

Private MyName As String

私有变量只可使用于同一模块中的过程。

注意:

在模块级别中使用 Dim 语句与使用 Private 语句是相同的。不过使用 Private 语句可以更容易地读取和解释代码。

使用Static 语句:当使用 Static 语句取代 Dim 语句时,所声明的变量在调用时仍保留它原先的值。

使用Option Explicit 语句:在 Visual Basic 中可以简单地通过一个赋值语句来隐含声明变量。所有隐含声明变量都为 Variant 类型,而Variant 类型变量比大多数其他类型的变量需要更多的内存资源。如果显式地声明变量为指定的数据类型,则应用程序将更有效。显式声明所有变量减少了命名冲突以及拼写错误的发生率。

如果不想使Visual Basic 生成隐含声明,可以将Option Explicit 语句放置于模块中所有的过程之前。这一个语句要求对模块中所有的变量做显式地声明。如果模块包含Option Explicit 语句,则当 Visual Basic 遇到一个先前未定义的变量或拼写错误,它会发生编译时间的错误。

可以设置 Visual Basic 程序环境中的某个选项,使得自动在所有新的模块中包含 Option Explicit 语句。

注意: 需显式地声明固定大小的数组与动态数组。

为自动化声明一个对象变量:当使用一个应用程序去控制另外一个应用程序的对象时,应该设置一个对于其他应用程序的类型库的引用。若设置一个引用,则可以根据它们最常指定的类型来声明对象变量。例如,如果是在 Microsoft Word 中,当对 Microsoft Excel 类型库做一引用设置时,可以在 Microsoft Word 中声明 Worksheet 类型的变量来表示 Microsoft Excel 中的Worksheet 对象。

如果使用其他的应用程序去控制 Microsoft Access 对象,在多数情况下,可以根据它们最常指定的类型来声明对象变量。也可以使用关键字 New 去自动生成一个对象的新实例。然而,可能要指示它是 Microsoft Access 对象。例如,当在 Microsoft Visual Basic 里面声明一个对象变量去表示 Microsoft Access form. 时,必须区别它是 Microsoft Access Form. 对象或是 Visual Basic Form. 对象。所以在声明变量的语句中必须要包含类型库的名称,如下面示例所示:

Dim frmOrders As New Access.Form

某些应用程序并不能识别特别的 Microsoft Access 对象类型。既使已经在这些应用程序中设置了一个对 Microsoft Access 类型库的引用,必须声明所有 Microsoft Access 对象变量为 Object 类型。不能使用 New 关键字去创建这个对象的新实例。下面的示例显示了不能识别 Microsoft Access 对象类型的应用程序,如何去声明一个变量用来表示 Microsoft Access Application 对象。然后应用程序创建一个 Application 对象的实例。

Dim appAccess As Object

Set appAccess = CreateObject(“Access.Application”)

11.3.4.2 声明常数

如果要声明一个常数,可以使用 Const 语句去声明,并且设置它的值;而在常数声明完之后,则不能加以更改或赋予新值。

在声明部分,可以在过程中或者在模块顶部声明常数。模块级别中的常数默认为私有的。若要声明一个公共模块级别常数,则可以在 Const 语句前加上 Public 这个关键字。也可以利用在 Const 语句前加上 Public 关键字来明确地声明一个私有的常数,使得我们可更容易地去读取并且解释代码。

下面的示例,声明了一个 Public 常数 conAge 为 Integer 类型,并且指定它的值 为34。

Public Const conAge As Integer = 34

常数可以声明成下列数据类型中的一种:Boolean、Byte、 Integer、Long、Currency、Single、Double、Date、String 或 Variant。因为已经知道常数的值,所以可以指定 Const 语句中的数据类型。关于数据类型的详细信息。

可以在一个语句中声明数个常数。为了指定数据类型,必须将每一个常数的数据类型包含进来。在下面的语句中,常数 conAge 和 conWage 被声明为 Integer 类型。

Const conAge As Integer = 34, conWage As Currency = 35000

11.3.4.3 声明数组

数组的声明方式和其他的变量是一样的,它可以使用 Dim、 Static、Private 或 Public 语句来声明。标量变量(非数组)与数组变量的不同在于通常必须指定数组的大小。若数组的大小被指定的话,则它是个固定大小数组。若程序运行时数组的大小可以被改变,则它是个动态数组,

数组是否从 0 或 1 索引是根据 Option Base 语句的设置。如果 Option Base 没有指定为1,则数组索引从0 开始。

1.声明固定大小的数组

下面这行代码声明了一个固定大小的数组,它是个 11 行乘以 11 列的Integer 数组:

Dim MyArray(10, 10) As Integer

第一个参数代表的是行;而第二个参数代表的是列。

与其他变量的声明一样,除非指定一个数据类型给数组,否则声明数组中元素的数据类型为 Variant。数组中每个数组的数字型 Variant 元素占用 16 个字节。每个字符串型 Variant 元素占用 22 个字节。为了尽可能使写的代码简洁明了,则要明确声明的数组为某一种数据类型而非 Variant。下面的这几行代码比较了几个不同数组的大小:

‘ 整型数组使用 22 个字节(11 元素* 2 字节)。

ReDim MyIntegerArray(10) As Integer

‘ 双精度数组使用 88 个字节(11 元素 * 8 字节)。

ReDim MyDoubleArray(10) As Double

‘ 变体型数组至少使用 176 字节(11 元素 * 16 字节)。

ReDim MyVariantArray(10)

‘ 整型数组使用 100 * 100 * 2 字节(20,000 字节)。

ReDim MyIntegerArray (99, 99) As Integer

‘ 双精度数组使用 100 * 100 * 8 字节(80,000 字节)。

ReDim MyDoubleArray (99, 99) As Double

‘ 变体型数组至少使用 160,000 字节(100 * 100 * 16 字节)。

ReDim MyVariantArray(99, 99)

数组变量的最大值,是以所用的操作系统有多少可用内存为基础。若使用的数组大小超过了系统中可用内存总数的话,则速度会变慢,因为必须从磁盘中读写回数据。

2.声明动态数组

若声明为动态数组,则可以在执行代码时改变数组大小。可以利用 Static、Dim、Private 或 Public 语句来声明数组,并使括号内为空,如下示例所示。

Dim sngArray() As Single

注意:

可以在过程中使用 ReDim 语句来做隐含性的数组声明。当使用 ReDim 语句时要小心点,不要拼错数组的名称。否则即使在模块中有包含 Option Explicit 语句,仍然会因此而生成第二个数组。

对于过程中的数组范围,可以使用 ReDim 语句去改变它的维数,去定义元素的数目以及每个维数的底层绑定。每当需要时,可以使用 ReDim 语句去更改动态数组。然而当做这个动作时,数组中存在的值会丢失。若要保存数组中原先的值,则可以使用 ReDim Preserve 语句来扩充数组。例如,下列的语句将 varArray 数组扩充了10 个元素,而原本数组中的当前值并没有消失掉。

ReDim Preserve varArray(UBound(varArray) + 10)

注意:

当对动态数组使用 Preserve 关键字时,只可以改变最后维数的上层绑定,而不能改变维数的数目。

11.3.5 过程及其调用

11.3.5.1 Function 过程

Function 过程是一系列由 Function 和 End Function 语句所包含起来的 Visual Basic 语句。Function 过程和 Sub 过程很类似,但函数可以返回一个值。Function 过程可经由调用者过程通过传递参数,例如常数、变量、或是表达式等来调用它。如果一个 Function 过程没有参数,它的 Function 语句必须包含一个空的圆括号。函数会在过程的一个或多个语句中指定一个值给函数名称来返回值。

在下面的示例中,Celsius 函数会根据华氏温度来计算摄氏温度。当 Main 过程调用此函数时,会有一包含参数值的变量传递给此函数。而计算的结果会返回到调用的过程,并且显示在一个消息框中。

Sub Main()

temp = Application.InputBox(Prompt:= _

“Please enter the temperature in degrees F.”,

Type:=1)

MsgBox “The temperature is ” & Celsius(temp) & “

degrees C.”

End Sub

Function Celsius(fDegrees)

Celsius = (fDegrees - 32) * 5 / 9

End Function

11.3.5.2 Sub 过程

Sub 过程是一系列由 Sub 和 End Sub 语句所包含起来的 Visual Basic 语句,它们会执行动作却不能返回一个值。Sub 过程可有参数,例如常数、变量、或是表达式等来调用它。如果一个 Sub 过程没有参数,则它的 Sub 语句必须包含一个空的圆括号。

下面 Sub 过程中,每一行都有注释来解释它的作用:

‘声明过程命名为 GetInfo

‘该 Sub 过程没有参数

Sub GetInfo()

‘声明字符串变量命名为 answer

Dim answer As String

‘指定 InputBox 函数的返回值给 answer

answer = InputBox(Prompt:=“What is your name?”)

‘条件 If...Then...Else 语句

If answer = Empty Then

‘调用 MsgBox 函数

MsgBox Prompt:=“You did not enter a name.”

Else

‘MsgBox 函数与 answer 变量连接。

MsgBox Prompt:=“Your name is ” & answer

‘结束 If...Then...Else 语句

End If

‘结束 Sub 过程

End Sub

11.3.5.3 属性过程

属性过程是一系列的 Visual Basic 语句,它允许程序员去创建并操作自定义的属性。属性过程可以用来为窗体,标准模块,以及类模块创建只读属性。可被用来在代码中代替 Public 变量,当设置属性值时上述动作应被执行。

与 Public 变量不同,在对象浏览器中属性过程会有一些帮助字符串指定给自定义的属性。

当创建一个属性过程时,它会变成此过程所包含的模块的一个属性。Visual Basic 提供下列三种类型的 Property 过程:

Property Let 用来设置属性值的过程。

Property Get 用来返回属性值的过程。

Property Set 用来设置对对象引用的过程。

声明属性过程的语法如下所示:

[Public | Private] [Static] Property {Get | Let | Set}

propertyname_ [(arguments)] [As type]

statements

End Property

属性过程通常是成对使用的:Property Let 与 Property Get 一组,而 Property Set 与 Property Get 一组。单独声明一个 Property Get 过程就像声明只读属性。三个 Property 过程一起使用时,只有对 Variant 变量有用,因为只有 Variant 才能包含一个对象或其他数据类型的信息。Property Set 本意是使用在对象上;而 Property Let 则不是。

在 Property 过程声明中所需要的参数如下:

Property Get Property Get propname(1, ..., n) As type

Property Let Property Let propname(1, ..., n, n+1)

Property Set Property Set propname(1, ..., n, n+1)

在具有相同名称属性过程中,从第一个到最后一个参数(1, ..., n)都必须共享相同的名称与数据类型。

Property Get 过程声明时所需的参数比相关的 Property Let 以及 Property Set 声明少一个。Property Get 过程的数据类型必须与相关的 Property Let 以及 Property Set 声明中的最后 (n+1)个参数的类型相同。例如,如果声明下列的 Property Let 过程,则 Property Get 声明所使用参数的名称与数据类型必须同 Property Let 过程中所用的一样。

Property Let Names(intX As Integer, intY As Integer,

varZ As Variant)

‘ 执行语句.

End Property

Property Get Names(intX As Integer, intY As Integer)

As Variant

‘ 执行语句.

End Property

在 Property Set 声明中,最后一个参数的数据类型必须是对象类型或是 Variant。

11.3.5.4 调用 Sub 以及 Function 过程

从其他过程调用一个 Sub 过程时,必须键入过程名称以及任何需要的参数值。而 Call 语句并不需要,不过若使用它,则任何参数必须以括号括起来。

可以使用 Sub 过程去组织其他的过程,因此可以较容易地了解并调试它们。在下面的示例中,Sub 过程 Main 传递参数值 56 去调用 Sub 过程 MultiBeep。运行 MultiBeep 后,控件返回 Main,然后 Main 调用 Sub 过程 Message。Message 显示一个信息框;当按“确定”键时,控件会返回 Main,接着 Main 退出执行。

Sub Main()

MultiBeep 56

Message

End Sub

Sub MultiBeep(numbeeps)

For counter = 1 To numbeeps

Beep

Next counter

End Sub

Sub Message()

MsgBox “Time to take a break!”

End Sub

1.调用具有多个参数的 Sub 过程

下面的示例展示了调用具有多个参数的 Sub 过程的两种不同方法。当第二次调用 HouseCalc 时,因为使用 Call 语句所以需要利用括号将参数括起来。

Sub Main()

HouseCalc 99800, 43100

Call HouseCalc(380950, 49500)

End Sub

Sub HouseCalc(price As Single, wage As Single)

If 2.5 * wage <= 0.8 * price Then

MsgBox “You cannot afford this house.”

Else

MsgBox “This house is affordable.”

End If

End Sub

在调用 Function 过程时使用括号。

为了使用函数的返回值,必须指定函数给变量,并且用括号将参数封闭起来;如下示例所示:

Answer3 = MsgBox(“Are you happy with your salary?”, 4, “Question 3”)

如果不在意函数的返回值,可以用调用 Sub 过程的方式来调用函数。如下面示例所示,可以省略括号,列出参数并且不要将函数指定给变量:

MsgBox “Task Completed!”, 0, “Task Box”

注意在上述例子中若包含括号,则语句会导致一个语法错误。

2.传递命名参数

Sub 或 Function 过程中的语句可以利用命名参数来传递值给被调用的过程。参数有两种传递方式:按值来传递和按地址来传递。按值传递只是传递参数的一个副本,在函数内建立一个同参数类型及内容一样的变量,在过程体内部参数对参数所作的改变不会影响到实际参数;按地址传递则不然,它传递的是实际参数的地址,过程中所有对参数的改变都将影响到实际参数”。命名参数的组成是由参数名称紧接着冒号(:=)以及等号,然后指定一个值给参数。

下面的示例使用命名参数来调用不具返回值的 MsgBox 函数。

MsgBox Title:=“Task Box”, Prompt:=“Task Completed!”

下面的示例使用命名参数调用 MsgBox 函数。将返回值指定给变量 answer3。

answer3 = MsgBox(Title:=“Question 3”, _

Prompt:=“Are you happy with your salary?”, Buttons:=4)

11.3.5.5 调用属性过程

表11-2 列出了调用属性过程的语法。

当调用一个 Property Let 或 Property Set 过程时,总是会有一个参数出现在等号(=)的右边。

当用多个参数声明一个 Property Let 或 Property Set 过程时, Visual Basic 传递调用的右边参数,给 Property Let 或 PropertySet 声明中的最后一个参数。例如,图11-18 显示了 Property 过程调用中的参数与 Property Let 声明中的参数的关系:

实际上,将属性过程与多个参数合用只有在创建属性的数组时才会使用。

篇11:VBA数组使用方法

1、声明数组,

数组的声明方式和其它的变量是一样的,它可以使用Dim、Static、Private 或 Public 语句来声明。标量变量(非数组)与数组变量的不同在于通常必须指定数组的大小。若数组的大小被指定的话,则它是个固定大小数组。若程序运行时数组的大小可以被改变,则它是个动态数组。

数组是否从0 或1 索引是根据Option Base 语句的设置。如果Option Base 没有指定为 1,则数组索引从零开始。

(1)声明固定大小的数组

下面这行代码声明了一个固定大小的数组,它是个 11 行乘以 11 列的 Integer 数组:

Dim MyArray(10, 10) As Integer

(2)声明动态数组

若声明为动态数组,则可以在执行代码时去改变数组大小。可以利用 Static、Dim、Private 或 Public 语句来声明数组,并使括号内为为空,如下示例所示。

Dim sngArray As Single

2、获得数组的最大与最小下标。利用LBound 函数与UBound 函数函数可以分别来获得数组的最小与最大下标,其语法是:

LBound(arrayname[, dimension])

UBound(arrayname[, dimension])

语法包含下面部分:

部分 描述

arrayname 必需的。数组变量的名称,遵循标准的变量命名约定。

dimension 可选的;Variant (Long)。指定返回哪一维的下界。1 表示第一维,2 表示第二维,如此类推。如果省略dimension,就认为是 1。

3、ReDim 语句。ReDim 语句用来定义或重定义原来已经用带空圆括号(没有维数下标)的 Private、Public 或 Dim 语句声明过的动态数组的大小,其语法是:

ReDim [Preserve] varname(subscripts) [As type] [, varname(subscripts) [As type]] . . .

ReDim 语句的语法包括以下几个部分:

部分 描述

Preserve 可选的,

关键字,当改变原有数组最末维的大小时,使用此关键字可以保持数组中原来的数据。

varname 必需的。变量的名称;遵循标准的变量命名约定。

subscripts 必需的。数组变量的维数;最多可以定义 60 维的多维数组。subscripts 参数使用下面的语法:

[lower To] upper [,[lower To] upper] . . .

如果不显式指定lower,则数组的下界由Option Base 语句控制。如果没有Option Base 语句则下界为 0。

type 可选的。变量的数据类型;可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(对变长的字符串)、String * length(对定长的字符串)、Object、Variant、用户定义类型或对象类型。所声明的每个变量都要有一个单独的 As type 子句。对于包含数组的 Variant 而言,type 描述的是该数组的每个元素的类型,不能将此 Variant 改为其它类型。

可以使用 ReDim 语句反复地改变数组的元素以及维数的数目,但是不能在将一个数组定义为某种数据类型之后,再使用ReDim 将该数组改为其它数据类型,除非是 Variant 所包含的数组。如果该数组确实是包含在某个Variant 中,且没有使用Preserve 关键字,则可以使用As type 子句来改变其元素的类型,但在使用了此关键字的情况下,是不允许改变任何数据类型的。

如果使用了Preserve关键字,就只能重定义数组最末维的大小,且根本不能改变维数的数目。例如,如果数组就是一维的,则可以重定义该维的大小,因为它是最末维,也是仅有的一维。不过,如果数组是二维或更多维时,则只有改变其最末维才能同时仍保留数组中的内容。

篇12:VBA UsedObjects 集合用法

作者: 字体:[增加 减小] 类型:

可用 Application 对象的 UsedObjects 属性返回一个 UsedObjects 对象,

返回一个 UsedObjects 集合后,便可用 Count 属性来确定 Microsoft Excel 应用程序中所用对象的个数。

在本示例中,Microsoft Excel 确定已分配的对象的个数,并通知用户,

本示例假定在应用程序中执行重新计算,并且在完成前中断重新计算。

代码如下:

Sub CountUsedObjects()

MsgBox “The number of used objects in this application is: ” & _

Application.UsedObjects.Count

End Sub

篇13:VBA标准模块与类模块

大家通过之前的介绍,已知道怎么将一个空模块插入VBA的工程中,从插入模块中可以看到,模块有有两种——标准模块与类模块。类模块是含有类定义的特殊模块,包括其属性和方法的定义。在后面会有介绍与说明。

随着工程越来越委员复杂,我们就有可能会有多个模块。使用多模块的好处就是,它允许将相关的过程聚合在一起,使代码的可维护性与可重用性大大提高,更使我们能够方便地管理代码。通过不同的模块,我们还可以为不同模块定制不同的行为,定制模块行为的方法有4种:

1、Option Explicit。当使用Option Explicit时,必须在模块中的所有过程声明每一个变量,否则会出现语法错误并不能被编译。这样做的好处是,它能消除程序中因为错拼变量名而导致程序错误,所以见意使用此选项。自动设定的方法:在VBA编辑器工具菜单中选项里的编辑器选卡中的要求声明变量选项选上即可。这个每次插入新模块时会自动插入此声明。

2、Option Private Module。当使用此设定时,模块中的代码将标记为私有,这样在宏对话框中就不能看到这些代码,也就是在Excel主界面的工具/宏/宏的对话框中不会显示私有的子程序名称,这也防止了模块的内容被其它工程引用,不过在同一工程中的其它模块仍然是可用的。

3、Option Compare {Binary | Text | Database},

用于声明字符串比较时所用的缺省比较方法。如果模块中没有 Option Compare 语句,则缺省的文本比较方法是 Binary。

Option Compare Binary 是根据字符的内部二进制表示而导出的一种排序顺序来进行字符串比较。在 Microsoft Windows 中,排序顺序由代码页确定。典型的二进制排序顺序如下例所示:

A < B < E < Z < a < b < e < z < _ < _ < _ < _ < _ < ?

Option Compare Text 根据由系统区域确定的一种不区分大小写的文本排序级别来进行字符串比较。当使用Option Compare Text 对相同字符排序时,会产生下述文本排序级别:

(A=a) < ( _=_) < (B=b) < (E=e) < (_=_) < (Z=z) < (_=_)

Option Compare Database 只能在 Microsoft Access 中使用。当需要字符串比较时,将根据数据库的区域ID 确定的排序级别进行比较。

4、Option Base {0 | 1}。用来声明数组下标的缺省下界。

注意 Dim、Private、Public、ReDim 以及 Static 语句中的 To 子句提供了一种更灵活的方式来控制数组的下标。不过,如果没有使用 To 子句显式地指定下界,则可以使用 Option Base 将缺省下界设为 1。使用 Array 函数或 ParamArray 关键字创建的数组的下界为 0;Option Base 对 Array 或 ParamArray 不起作用。

Option Base 语句只影响位于包含该语句的模块中的数组下界。

篇14:VBA之Hello World!

很多教编程的书籍,都喜欢用一个Hello World的小程序开头,我们的VBA之旅也从这里开始吧,

进入VBA编辑器,由插入菜单中插入一个模块,然后再由插入菜单中插入我们的第一个程序,名称为ExcelbaSub1,然后VBA编辑器就自动生成一个子过程,在子过程的中间空白处键入我们的代码:

Public Sub ExcelbaSub1

Dim TStr As String

TStr = “Hello World!”

Application.ActiveSheet.Range(“A1”).Value = TStr

Debug.Print TStr

MsgBox TStr, , “bianceng.cn”

End Sub

我们的Hello World的小程序就成完了,下面按运行菜单中的运行子过程/用户窗体,或在点击工具栏的运行按钮,或按F5就可以运行我们的程序了,除此外还可以从Excel主界面的工具/宏/宏中,选择ExcelbaSub1来运行,

下面来解释一下这个程序的每个句的用途:

第一句:Public关键字是声明这个子程序是公用的,Sub是声明子程序的关键字,而ExcelbaSub1就是我们的子程序名称了。

第二句:Dim是声明变量的关键字,这里我们用来声明一个名为TStr的字符串变量。

第三句:将TStr这个变量赋值为Hello World!

第四句:将当前工作表的A1格的值设定为Hello World!

第五句:利用Debug.Print地立即窗口中显示TStr的值。

第六句:用消息对话框显示TStr的值。

最后一句:标记结束子程序。

程序虽小,但最基本的元素都齐了,也许,这就是Hello World的魅力所在吧*~_~*

篇15:UserAccessList 集合的功能(VBA)

作者: 字体:[增加 减小] 类型:

可用 ProtectedRange 对象的 Users 属性返回一个 UserAccessList 集合,

返回一个 UserAccessList 集合后,便可用 Count 属性来确定访问受保护区域的用户数量。在下例中,Microsoft Excel 将访问第一个受保护区域的用户的数量通知给用户。本示例假定受保护的区域位于活动工作表上。

代码如下:

Sub UseDeleteAll()

Dim wksSheet As Worksheet

Set wksSheet = Application.ActiveSheet

‘ Notify the user the number of users that can access the protected range.

MsgBox wksSheet.Protection.AllowEditRanges(1).Users.Count

End Sub

篇16:VBA静态变量与常量

VBA代码中包含变量、运算符和语句,变量在代码中起到互交与连接的作用。变量从创建为合适的对象与数据类型,到初始化,再通过运算符计算或执行语句修改,来完成整个互交的过程。

声明变量的关键词是Dim,其语法是

Dim [WithEvents] varname[([subscripts])] [As [New] type] [, [WithEvents] varname[([subscripts])] [As [New] type]] . . .

Dim语句的语法包含下面部分:

部分 描述

WithEvents 可选的。关键字,说明 varname 是一个用来响应由ActiveX 对象触发的事件的对象变量。只有在类模块中才是合法的。使用WithEvents,可以声明任意个所需的单变量,但不能使用 WithEvents 创建数组。New 和 WithEvents 不能一起使用。

varname 必需的。变量的名称;遵循标准的变量命名约定。

subscripts 可选的。数组变量的维数;最多可以定义 60 维的多维数组。subscripts 参数使用下面的语法:

[lower To] upper [, [lower To] upper] . . .

如果不显式指定 lower,则数组的下界由 Option Base 语句控制。如果没有使用Option Base 语句,则下界为 0。

New 可选的。可隐式地创建对象的关键字。如果使用 New 来声明对象变量,则在第一次引用该变量时将新建该对象的实例,因此不必使用 Set 语句来给该对象引用赋值。New 关键字不能声明任何内部数据类型的变量,以及从属对象的实例,也不能与 WithEvents 一起使用。

type 可选的。变量的数据类型;可以是 Byte、 Boolean 、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(对变长的字符串)、String * length (对定长的字符串)、Object、Variant、用户定义类型、或对象类型。所声明的每个变量都要一个单独的 As type 子句。

而在声明变量或创建变量的同时,最好先考虑好变量用什么数据类型,下面 表格显示所支持的数据类型,以及存储空间大小与范围。

数据类型 存储空间大小 范围

Byte 1 个字节 0 到 255

Boolean 2 个字节 True 或 False

Integer 2 个字节 -32,768 到 32,767

Long

(长整型) 4 个字节 -2,147,483,648 到 2,147,483,647

Single

(单精度浮点型) 4 个字节 负数时从 -3.402823E38 到 -1.401298E-45;正数时从 1.401298E-45 到 3.402823E38

Double

(双精度浮点型) 8 个字节 负数时从 -1.79769313486231E308到-4.94065645841247E-324;正数时从4.94065645841247E-324 到 1.79769313486232E308

Currency

(变比整型) 8 个字节 从 -922,337,203,685,477.5808 到 922,337,203,685,477.5807

Decimal 14 个字节 没有小数点时为 +/-79,228,162,514,264,337,593,543,950,335,而小数点右边有 28 位数时为 +/-7.9228162514264337593543950335;最小的非零值为 +/-0.0000000000000000000000000001

Date 8 个字节 100 年 1 月 1 日 到 9999 年 12 月 31 日

Object 4 个字节 任何 Object 引用

String

(变长) 10 字节加字符串长度 0 到大约 20 亿

String

(定长) 字符串长度 1 到大约 65,400

Variant

(数字) 16 个字节 任何数字值,最大可达 Double 的范围

Variant

(字符) 22 个字节加字符串长度 与变长 String 有相同的范围

用户自定义

(利用 Type) 所有元素所需数目 每个元素的范围与它本身的数据类型的范围相同,

其中的Variant是个很特殊的数据类型,它能表示除固定长度之外的所有值,并可以通过VarType来返回其数据子类型。其语法如下:

VarType(varname)

必要的 varname 参数是一个 Variant,包含用户定义类型变量之外的任何变量。

下面这个表表示VarType返回的值的意义:

常数 值 描述

vbEmpty 0 Empty(未初始化)

vbNull 1 Null(无有效数据)

vbInteger 2 整数

vbLong 3 长整数

vbSingle 4 单精度浮点数

vbDouble 5 双精度浮点数

vbCurrency 6 货币值

vbDate 7 日期

vbString 8 字符串

vbObject 9 对象

vbError 10 错误值

vbBoolean 11 Boolean 值

vbVariant 12 Variant(只与变体中的数组一起使用)

vbDataObject 13 数据访问对象

vbDecimal 14 十进制值

vbByte 17 位值

vbUserDefinedType 36 包含用户定义类型的变量

vbArray 8192 数组

变量因声明的位置与使用Public或Private关键字,其有效范围可能为3种:过程范围、模块范围与全局范围。当变量放在模块头部,并使用Public代替Dim时,这个变量就是全局变量;而如果是用Dim或者用Private代替Dim时,这个变量是模块级变量;而当变量在过程中声明就是过程变量了。

通常的过程变量在过程结束后值是不保存,但如果子程序使用Static语句,或者用Static声明的过程变量是例外的,下面用两个实例说明一下。

Static Sub ExcelbaSub2

Dim X As Integer

MsgBox “X = ” & X

X = X + 1

End Sub

Sub ExcelbaSub3()

Static Y As Integer

MsgBox “Y = ” & Y

Y = Y + 1

End Sub

运行上面的过程,你就比较容易理解Static的用途了。

除了变量,我们还经常用到一些常量,包含系统定义与自定义的常量。常量与变量有很多相似之处,但常量的值是保持不变的,如果代码中常常出现一个数值,最好的方法就是定义成常量,这样既使代码易于编写,也让代码容易阅读。定义常量的关键词是Const,其语法是:

语法

[Public | Private] Const constname [As type] = expression

其中的expression就是常量的值,其它与变量相同,就不重复了。

篇17:VBA运算符的类型及优先级

运算符对公式中的元素进行特定类型的运算,Microsoft Excel包含四种类型的运算符:算术运算符、比较运算符、文本运算符和引用运算符。

运算符的类型

算术运算符 若要完成基本的数学运算,如加法、减法和乘法,连接数字和产生数字结果等,请使用以下算术运算符:

算术运算符 含义(示例)

+(加号) 加法运算 (3+3)

–(减号) 减法运算 (3–1)

负 (–1)

*(星号) 乘法运算 (3*3)

/(正斜线) 除法运算 (3/3)

%(百分号) 百分比 (20%)

^(插入符号) 乘幂运算 (3^2)

比较运算符 可以使用下列运算符比较两个值。当用运算符比较两个值时,结果是一个逻辑值,不是 TRUE 就是 FALSE。

比较运算符 含义(示例)

=(等号) 等于 (A1=B1)

>(大于号) 大于 (A1>B1)

<(小于号) 小于 (A1

>=(大于等于号) 大于或等于 (A1>=B1)

<=(小于等于号) 小于或等于 (A1<=B1)

(不等号) 不相等 (A1B1)

文本连接运算符 使用和号 (&) 加入或连接一个或更多文本字符串以产生一串文本。

文本运算符 含义(示例)

&(和号) 将两个文本值连接或串起来产生一个连续的文本值 (“North”&“wind”)

引用运算符 使用以下运算符可以将单元格区域合并计算。

引用运算符 含义(示例)

:(冒号) 区域运算符,产生对包括在两个引用之间的所有单元格的引用 (B5:B15)

,(逗号) 联合运算符,将多个引用合并为一个引用 (SUM(B5:B15,D5:D15))

(空格) 交叉运算符产生对两个引用共有的单元格的引用,

(B7:D7 C6:C8)

公式中的运算次序

公式按特定次序计算数值。Excel 中的公式通常以等号 (=) 开始,用于表明之后的字符为公式。紧随等号之后的是需要进行计算的元素(操作数),各操作数之间以运算符分隔。Excel 将根据公式中运算符的特定顺序从左到右计算公式。

运算符优先级

如果公式中同时用到多个运算符,Excel 将按下表所示的顺序进行运算。如果公式中包含相同优先级的运算符,例如,公式中同时包含乘法和除法运算符,则 Excel 将从左到右进行计算。

运算符 说明

:(冒号)

(单个空格)

,(逗号)

引用运算符

– 负号(例如 –1)

% 百分比

^ 乘幂

* 和 / 乘和除

+ 和 – 加和减

& 连接两个文本字符串(连接)

= < > <= >= 比较运算符

使用括号

若要更改求值的顺序,请将公式中要先计算的部分用括号括起来。例如,下面公式的结果是 11,因为 Excel 先进行乘法运算后进行加法运算。将 2 与 3 相乘,然后再加上 5,即得到结果。

=5+2*3

与此相反。如果使用括号改变语法,Excel 先用 5 加上 2,再用结果乘以 3,得到结果 21。

=(5+2)*3

在下例中,公式第一部分中的括号表明 Excel 应首先计算 B4+25,然后再除以单元格 D5、E5 和 F5 中数值的和。

=(B4+25)/SUM(D5:F5)

篇18:各种Excel VBA的命令2

本示例重复最近用户界面命令,本示例必须放在宏的第一行。

Application.Repeat

下例中,变量 counter 代替了行号。此过程将在单元格区域 C1:C20 中循环,将所有绝对值小于 0.01 的数字都设置为 0(零)。

Sub RoundToZero1

For Counter = 1 To 20

Set curCell = Worksheets(“Sheet1”).Cells(Counter, 3)

If Abs(curCell.Value) 0 Then

' Application.ActivePRinter = “zdserver2HP LaserJet 5000 PCL 6

在 Ne00:” '指定打印机

ActiveWindow.SelectedSheets.PrintOut Copies:=myPrintNum,

Collate:=True '设置打印信息,其中Copies:=myPrint为打印份数

Else

MsgBox “请输入要打印的份数”

End If

ActiveSheet.ShowAllData '全部显示

ActiveSheet.Protect Password:=641112 ' 保护工作表并设置密码

Sheets(“封面”).Select

Application.ScreenUpdating = True

End Sub

Sub 打印余额()

Application.ScreenUpdating = False

Sheets(“余额表”).Select

Call 重算所有表

ActiveSheet.Unprotect Password:=641112 '撤消工作表保护并取消密码

ActiveWindow.ScrollColumn = 10

Selection.AutoFilter Field:=1, Criteria1:=“”

'以下10行弹出窗口输入打印信息

Dim myPrintNum As Integer

Dim myPrompt, myTitle As String

myPrompt = “请输入要打印的份数”

myTitle = “打印选取范围”

myPrintNum = Application.InputBox(myPrompt, myTitle, 4, , , , , 1)

If myPrintNum 0 Then

' Application.ActivePrinter = “zdserver2HP LaserJet 5000 PCL 6 在

Ne00:” ' '指定打印机

ActiveWindow.SelectedSheets.PrintOut Copies:=myPrintNum,

Collate:=True '设置打印信息,其中Copies:=myPrint为打印份数

Else

MsgBox “请输入要打印的份数”

End If

ActiveSheet.ShowAllData '全部显示

ActiveSheet.Protect Password:=641112 ' 保护工作表并设置密码

Sheets(“封面”).Select

Application.ScreenUpdating = True

End Sub

Sub 备份()

Dim y '变量声明-需保存工作表的路径和名称

[M1] = ActiveWorkbook.FullName '单元格M1=当前工作簿的路径和名称

y = cells(1, 14) 'Y=单元格N1的值,即计算后的需保存工作簿的路径和名称

Worksheets(“封面”).UsedRange.Columns(“M:N”).Calculate '计算指定区域

ActiveWorkbook.SaveCopyAs y '备份到指定路么Y

End Sub

Sub 重算活动表()

With Application

.Calculation = xlManual

.MaxChange = 0.001

End With

ActiveWorkbook.PrecisionAsDisplayed = True

ActiveWindow.DisplayZeros = True

ActiveSheet.Calculate

End Sub

Sub 重算指定表()

Attribute 重算指定表.VB_ProcData.VB_Invoke_Func = “zn14”

Worksheets(“银行帐”).Calculate

Worksheets(“日报表”).Calculate

End Sub

单元格数据改变引起计算激活过程 Private Sub Worksheet_Change(ByVal Target As Range)

Dim irow, icol As Integer

irow = Target.Row '变量行irow

icol = Target.Column '变量列icol

If irow > 6 And icol = 3 And cells(irow, 3) >= cells(irow - 1, 3)

Then '>大于6行,并且第3列,当本行 3列>2行3列

Application.EnableEvents = False

cells(irow, 2) = cells(irow - 1, 2) '本行 2 列=上一行2列

Application.EnableEvents = True

ElseIf irow > 6 And icol = 3 And cells(irow, 3) 大于6行,并且第3列,当本行 3列>2行3列

Application.EnableEvents = False

cells(irow, 2) = cells(irow - 1, 2) + 1 '本行 2 列=上行2列+1

Application.EnableEvents = True

ElseIf (icol = 3 Or icol = 4 Or icol = 6 Or icol = 8 Or icol = 9 Or

icol = 10 Or icol = 12 Or icol = 13) And irow > 6 Then 'And Target

“”

Application.EnableEvents = False

cells(irow, 5) = “=单位名称”

cells(irow, 7) = “=摘要”

cells(irow, 11) = “=余额”

Range(cells(irow, 14), cells(irow, 16)) = “=预内外收支NOP”

cells(irow, 17) = “=审核Q”

cells(irow, 18) = “=对帐U”

Range(cells(irow, 19), cells(irow, 20)) = “=内转收支XY”

cells(irow, 21) = “=政采Z”

Application.EnableEvents = True

End If

End Sub

'计算当前工作表路径及名称的函数,可作为单元格公式,也可写入宏

=CELL(“FILENAME”)

'改变Excel界面标题的宏

Private Sub Workbook_Open()

Application.Caption = “吃过了”

End Sub

'自动刷新单元格A1内显示的日期时间的宏

Sub mytime()

Range(“a1”) = Now()

Application.OnTime Now + TimeValue(“00:00:01”), “mytime”

End Sub

'用单元格A1的内容作为文件名保存当前工作簿的宏

Sub b()

ActiveWorkbook.SaveCopyAs Range(“A1”) + “.xls”

End Sub

'激活窗体的宏,此宏写入有窗体的工作表内

Private Sub CommandButton1_Click() '点数据录入按钮控件激活窗体

Load UserForm3 '激活窗体

UserForm3.StartUpPosition = 3 '激活窗体

UserForm3.Show '激活窗体

End Sub

'以下为窗体中点击各按钮运行的宏,写入窗体内

Public pos As Integer '声明变量pos

'战友确定按钮语句

Private Sub CommandButton1_Click()

Application.ScreenUpdating = False '此句和最后一句旨在不显

示宏的执行过程

'On Error GoTo ErrorHandle '可以不要

'ErrorHandle: '可以不要

'If Err.Number = 13 Then '可以不要

'Exit Sub '可以不要

'End If '可以不要

Call writeToWorkSheet '执行宏writetoworksheet

UserForm3.Hide '退出窗体,继续按钮少此句,退出按钮执行此句

Unload UserForm3 '退出窗体,继续按钮少此句,退出按钮执行此句

Call 批量打印 '[此处到接顺序2]

[L2] = “” '[到此处结束]

Sheets(“打印信息”).Select

Application.ScreenUpdating = True

End Sub

'退出按钮语句

Private Sub CommandButton2_Click()

UserForm3.Hide

Unload UserForm3

End Sub

'将窗体内的文本框中的数据写进工作表的单元格

Private Sub writeToWorkSheet()

ActiveSheet.Range(“k2”) = TextBox1.Value '将文字框内容写进k列

ActiveSheet.Range(“l2”) = TextBox2.Value '将文字框内容写进l列

TextBox1.Value = “” '清空文字框内容

TextBox2.Value = “” '清空文字框内容

Worksheets(“打印信息”).Range(“a2”).Value = 1 '给指定表的单元格写入

数据

Worksheets(“打印信息”).Range(“B3:E113”).Value = “” '清空指定表的单元

格数据

End Sub

'以下为根据条件打印的宏

Sub 打印() '部门明细查询及批星打印

Application.ScreenUpdating = False '关闭屏幕更新

If Cells(1, 4) = “” And Cells(1, 5) = “” Then '打印条件Cells(3,

13) = 1 And

' Application.ActivePrinter = “zdserver2HP LaserJet 5000 PCL

6 在 Ne00:” ' '指定打印机

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

'设置默认打印机的打印信息,其中Copies:=myPrint为打印份数

Else

Call 打印信息 '打倒为假时执行

End If

Application.ScreenUpdating = True '关闭屏幕更新

End Sub

'以下的循环过程,也用于批量打印,Z的值可以是Z=1 TO 5(1到5),也可是单元格的内容

Sub 批量打印()

For Z = Cells(1, 11) To Cells(1, 12) '变量X的值从打印起始号K1到结束

号L1之间逐渐递增

Cells(1, 13) = Z 'M1的值等于变量X

Next Z

End Sub

'以下是将打印情况写入工作表的宏

Sub 打印信息()

Application.ScreenUpdating = False '关闭屏幕更新

Dim Y '声明变量

Y = ActiveSheet.Name '判定活动工作表名称

Sheets(“打印信息”).Select

X = 3 '从第3行开始

Do While Not (IsEmpty(Cells(X, 2).Value)) '判断第1列的最后一行(

即空行的上一行)

X = X + 1 '在最后一行加一行即为空行

Loop

Cells(X, 2) = Cells(2, 1)

Cells(X, 3) = Sheets(Y).Cells(4, 3)

Cells(2, 1) = Cells(2, 1) + 1

Cells(X, 4) = Sheets(Y).Cells(1, 4)

Cells(X, 5) = Sheets(Y).Cells(1, 5)

[c1] = Y

Sheets(Y).Select '返回上一次打开的工作表

Application.ScreenUpdating = True '打开屏幕更新

End Sub

将文件保存为以某一单元格中的值为文件名的宏怎么写假设你要以Sheet1的A1单元格中的值为文件名保存,则应用命令:

ActiveWorkbook.SaveCopyAs Str(Range(“Sheet1!A1”)) + “.xls”

在Excel中,如何用程式控制某一单元格不可编辑修改?thanks!!!

Private Sub Workbook_Open()

ProtectSpecialRange (“A1”)

End Sub

Sub ProtectSpecialRange(RangeAddress As String)

On Error Resume Next

With Sheet1

.Cells.Locked = False

.Range(RangeAddress).Locked = True

.Protection.AllowEditRanges.Add Title:=“区域1”, Range:=Range

(RangeAddress) _

, Password:=“pass”

.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

End With

End Sub

对工作表编程,有时要判断工作表的记录总数,VBA里如何实现?

x=1

do while not (isempty(sheets(“”).cells(x,1).value)

x=x+1

loop

在VBA中等同于EXCELE中的求和函数-sum()-的函数是什么?

Application.WorksheetFunction.Sum()

自定义菜单有三个菜单项,要求手工顺序执行,

为防止误操作,执行完第一个菜单项后使其变灰(禁用),如何写?

Rowen

令其 Enable 属性同步与某个工具按钮是较为方便的。

如何进行表格更新?

是这样的,比如我已经有了一个原始表格A,这时有人通知我A表有错误,须加以修改,并给我一个表B,表B列出了须修改的参数(注意B的列数少于A的列数,因A的其他列无需修改)。现在问题是如何根据表B中的新值,在表A中找到相应位置,并加以修改。比如表B中列出了10002的JOHN的身高和体重等值需要修改,如何在A中找到10002的相应位置(身高体重),并加以修改。建�h�⒈�b�}�u至表a的sheet2,然後�绦邢铝械暮昙纯�

sub change()

dim dd as range

sheets(2).select

lastcell = range(“a65536”).end(xlup).row

for each dd in range(cells(2, 1), cells(lastcell, 1))

if dd = “” then exit sub

ff = dd.value

set c = sheets(1).columns(1).find(ff, lookat:=xlwhole)

if not c is nothing then

c.offset(0, 2) = dd.offset(0, 2)

c.offset(0, 3) = dd.offset(0, 3)

c.offset(0, 5) = dd.offset(0, 4)

end if

next

end sub

自定义菜单

把建立和删除自定义菜单的代码分别写在Workbook_openWorkbook_beforeclosed的事件中。

应该用VBA,工作薄代码中有workbook-open()过程,在该过程中写入

with activeworkbook

.sheets(“表2”).active

end with

VBA实现向锁定工作表中插入行,并自动复制上面行中指定列的函数

Option Explicit

Public Const strPass = “123” 123是口令

Sub 行上再插入一行()

ActiveSheet.Unprotect password:=strPass

Selection.Copy

Selection.Insert Shift:=xlDown

Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone,

SkipBlanks:= _

False, Transpose:=False

Application.CutCopyMode = False

ActiveSheet.Protect password:=strPass

End Sub

如何使不出现每次关闭XLS文件时出现的:

“XXX.xls文件已被修改,是否可在其修改后的内容?”字样??可以在工作表关闭之前进行手工保存工作ThisWorkbook.save

如何实现动态时间显示?

sub mytime

range(“a1”)=now()

Application.OnTime Now + Timevalue(“00:00:01”), “mytime”

end sub

用 vba 判断指定 excel 文件是否打开?

For Each w In Workbooks

If w.Name XXX Then

…………

End If

Next w

vba怎么调用excel自带的函数?比如vlookup?

Application.WorksheetFunction.f(x)f(x)是你想使用的工作表函数但是用内部函数时引用单元格会出错,怎么办?把你要引用的单元格改成VBA认可格式(类型)。如在Excel中的“F7:F12”应改为

“Range(“F7:F12”)”等。

VBA中如何关闭,保存和退出Excel?

Workbooks(“你的工作簿”).Save。

下表举例说明了使用 Rows 和 Columns 属性的一些行和列的引用。

引用 含义

Rows(1) 第一行

Rows 工作表上所有的行

Columns(1) 第一列

Columns(“A”) 第一列

Columns 工作表上所有的列

若要同时处理若干行或列,请创建一个对象变量并使用 Union 方法,将对 Rows 属性或 Columns 属性的多个调用组合起来。下例将活动工作簿中第一张工作表上的第一行、第三行和第五行的字体设置为加粗。

Sub SeveralRows()

Worksheets(“Sheet1”).Activate

Dim myUnion As Range

Set myUnion = Union(Rows(1), Rows(3), Rows(5))

myUnion.Font.Bold = True

End Sub

如果只是你说的只连接几个储存格那用简单的方法Range(“A1”).Formula = Application.Evaluate(“=[Book2.xls]Sheet1!A1”)

或Range(“A1”).Formula = “=[Book2.xls]Sheet1!A1”

请问在vba如何呼叫已定义的名称范围我在a1:b100插入名称∶myrange

请问我如何用vba选取此范围Range(“myrange”).Select

如何访问没有打开的EXCEL文件?

Sub AlternativeImport()

Dim xlapp As Excel.Application

Dim wbSource As Excel.Workbook

Set xlapp = New Excel.Application

xlapp.EnableEvents = False

Set wbSource = xlapp.Workbooks.Open(“C:testBook2.xls”)

Range(“A1:A10”).Value = wbSource.Sheets(“Sheet1”).Range

(“A1:A10”).Value

wbSource.Close False

xlapp.Quit

End Sub

怎样使VBAprject工程不可查看?(不用密码)

用可编辑十六进制文件的软件工具(如WinHex等)打开Excel.xls,在文件的尾部,查找ID=“{00000000-0000-0000-0000-000000000000}”(有工程锁定密码时),或ID=“{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}”(没有工程锁定密码时),修改其中的任意1位后,保存,即可达到目的.当查看工程是会出现“工程不可查看”的提示.注意:修改前,一定要备份原文件,以防不测

如何用VBA控制报表的格式(左边距,纸张大小,打印第几页等)

打印第几页控制:ActiveWindow.SelectedSheets.PrintOut From:=x, To:=y

ActiveSheet.PageSetup.LeftMargin= 左边距

ActiveSheet.PageSetup..PaperSize = 纸张大小

如何使VBA自动消除使用COPY复制后产生的虚线框?

Application.CutCopyMode = False

替换Excel 97的菜单栏是很容易的,只需创建一个新的菜单栏就会删除Excel 97的菜单栏。当需要恢复Excel 97的菜单栏时,只要删除新创建的菜单栏就可以了。该系统的自定义菜单中只需两个命令按钮,一个用来返回到系统的主画面(ReturnMAIN),另一个用来退出系统(ExitSYS)。下面是模块(Module)中有关的宏或是事件控制程序。

Sub ZapMenu( )

On Error Resume Next

CommandBars(“保险查询系统”).Delete

End Sub

这是一个用来删除自定义菜单栏的宏。语句On Error Resume Next保证无论自定义菜单栏是否存在都能正确删除它。

Sub ExitSYS( )

ZapMenu

ActiveWorkbook.Close SaveChanges := False

End Sub 这是用来退出系统的宏。它删除自定义菜单,并关闭活动的工作簿(不提示保存修改)。

Sub ReturnMAIN( )

Worksheets(“保险查询系统”).Select

End Sub

该宏用来返回主画面。它激活“保险查询系统”工作表。

Sub SetMenu( )

Dim myBar As CommandBar

Dim myButton As CommandBarButton

ZapMenu

Set myBar = CommandBars.Add(Name:=“保险查询系统”, _

Position :=msoBarTop, _

MenuBar :=True)

Set myButton = myBar.Controls.Add(msoControlButton)

myButton. = msoButtonCaption

myButton.Caption = “退出[&E]”

myButton.OnAction = “ExitSYS”

Set myButton = myBar.Controls.Add(msoControlButton)

myButton. = msoButtonCaption

myButton.Caption = “返回[&R]”

myButton.OnAction = “ReturnMAIN”

myButton.Visible = False

myBar.Protection = msoBarNoMove + msoBarNoCustomize

myBar.Visible = True

End Sub

这个宏包含五部分。第一部分定义了一对变量。第二部分首先运行ZapMenu宏,保证保险查询系统菜单栏是不存在的,然后创建它。参数MenuBar的值设为True,确保这个新创建的命令栏为一菜单栏。第三部分和第四部分将两个命令按钮加入到菜单栏中。并设置ReturnMAIN命令按钮的初始状态为不可见状态。最后一部分保护这个新创建的菜单栏,使用户不能移动也不能自定义新菜单栏。

工作表汇总

Sub sum() '表汇总,第1张的a1:e20等于所有表的相同单元格的和

Attribute sum.VB_ProcData.VB_Invoke_Func = “zn14”

Dim X As Worksheet

For y = 1 To 20

For z = 1 To 5

For Each X In Worksheets

shname = X.Name

ActiveSheet.Cells(y, z).Value = ActiveSheet.Cells(y, z).Value +

Worksheets(shname).Cells(y, z)

Next

Next z

Next y

End Sub

篇19:VBA过程:子程序与函数

过程,就是执行一个或多个给定任务的集合,又分为两种类型:子程序与函数。其两者之间的主要区别在于,函数会返回一个值而子程序不会返回值。

1、子程序。子程序是一个程序中可执行的最小部份,其语法为:

[Private | Public | Friend] [Static] Sub name [(arglist)]

[statements]

[Exit Sub]

[statements]

End Sub

Sub 语句的语法包含下面部分:

部分 描述

Public 可选的。表示所有模块的所有其它过程都可访问这个Sub 过程。 如果在包含Option Private 的模块中使用,则这个过程在该工程外是不可使用的。

Private 可选的。表示只有在包含其声明的模块中的其它过程可以访问该Sub 过程。

Friend 可选的。只能在类模块中使用。表示该Sub 过程在整个工程中都是可见的,但对对象实例的控制者是不可见的。

Static 可选的。表示在调用之间保留 Sub 过程的局部变量的值。Static 属性对在Sub 外声明的变量不会产生影响,即使过程中也使用了这些变量。

name 必需的。Sub 的名称;遵循标准的变量命名约定。

arglist 可选的。代表在调用时要传递给 Sub 过程的参数的变量列表。多个变量则用逗号隔开。

statements 可选的。Sub 过程中所执行的任何语句组。

其中的 arglist 参数的语法以及语法各个部分如下:

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]

部分 描述

Optional 可选的,

表示参数不是必需的关键字。如果使用了该选项,则arglist 中的后续参数都必须是可选的,而且必须都使用 Optional 关键字声明。如果使用了 ParamArray,则任何参数都不能使用 Optional。

ByVal 可选的。表示该参数按值传递。

ByRef 可选的。表示该参数按地址传递。ByRef 是 Visual Basic 的缺省选项。

ParamArray 可选的。只用于 arglist 的最后一个参数,指明最后这个参数是一个 Variant 元素的 Optional 数组。使用 ParamArray 关键字可以提供任意数目的参数。ParamArray 关键字不能与 ByVal,ByRef,或 Optional 一起使用。

varname 必需的。代表参数的变量的名称;遵循标准的变量命名约定。

type 可选的。传递给该过程的参数的数据类型,可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持变长)、Object 或 Variant。如果没有选择参数 Optional,则可以指定用户定义类型,或对象类型。

defaultvalue 可选的。任何常数或常数表达式。只对 Optional 参数合法。如果类型为 Object,则显式的缺省值只能是 Nothing。

2、函数:函数与子程序最大的区别就在于其可以返回值,而其它地方与子程序相似,语法如下:

[Public | Private | Friend] [Static] Function name [(arglist)] [As type]

[statements]

[name = expression]

[Exit Function]

[statements]

[name = expression]

End Function

可以看出除了声明的关键词外,其它基本类同,说明与用法也相近,这里就不再重复了。

篇20:使用VBA轻松筛选海量数据

使用VBA轻松筛选海量数据

一、问题的出现 众所周知,Excel具有很强的数据筛选功能.这对于解决一般的手工筛选是很方便的,但对于数据量大、需要多次重复按不同项目筛选时,使用Excel手工筛选就显得非常笨拙了.在日常金融统计工作中,就遇到一次这样的`情况:某农村信用联社大约有20000条支农贷款的数据记录存放在Excel文件中;要求按贷款的不同用途分别筛选,并将筛选结果放置到相应的工作表中,再按不同用途分别进行汇总和数据分析(贷款用途多达20种以上);2名操作人员花了大半天时间进行筛选、复制、粘贴,结果弄得迷迷糊糊,最终也没有筛选准确,苦不堪言.笔者通过编写VBA程序进行筛选,几分钟的时间就解决了问题,不仅减轻了工作量,而且统计结果相当准确,提前完成了任务.现在把问题的解决过程写出来,与大家共享.

作 者:赵志强  作者单位:河南省新安县农村信用联社业务科 刊 名:华南金融电脑 英文刊名:FINANCIAL COMPUTER OF HUANAN 年,卷(期):2004 12(9) 分类号: 关键词: 

excel中如何自定义函数

计算机二级Access数据库程序设计考试大纲

教你在Excel中如何禁止打印功能

光伏电站运维员工个人总结

ACCESS学习日记

Excel工作表的任意单元格中设页码

让Excel统计的出勤情况更直观EXCEL基本教程

如何设置ACCESS(运行时)的宏安全性级别数据库教程

ACCESS数据库中Field对象的caption属性读写数据库教程

了解一下NULLs怎样影响IN和EXISTS数据库教程

vba心得体会
《vba心得体会.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【vba心得体会(精选20篇)】相关文章:

改善PPT课件播放性能三法2023-08-28

计算机试题2022-10-16

电力通信中运维管理系统的应用剖析论文2023-12-16

词汇的起源之“HELLO”2023-04-23

9月计算机二级《公共基础》模拟试题2022-11-27

计算机二级access练习题2023-12-14

9月计算机二级Access考前试题及答案2024-01-23

Excel筛选数据2022-05-08

面试个人简介范文800字2022-06-10

Excel中批定可编辑的单元格区域excel办公/数码2022-05-02

点击下载本文文档