网友学VBA(1)- 写在前面的话
各位爱好钻研Office技术的网友,你们好!从今天开始,我将在我的博客中增加一个新的文章类别,即饮水机清洗设备“和网友一起学VBA(Visual Basic for Application)”,简称“网友学VBA”。我将把它作为一个专门系列,与我博客中的文学系列和税务系列并存,长期地写下去,同网友们一起交流学习心得,分享学习经验,共同提高VBA编程水平。
在实践中,VBA在Excel当中应用得最为广泛,也最有价值,能够高效、灵活地扩展Excel的功能,为处理大批量的、复杂的数据带来方便。因此,我们的讨论将以Excel VBA为主要内容,兼顾其他Office组件。
我个人认为,修炼Excel高手有三个层次。第一层是能够熟练地制作电子表格,并运用一些常用的、简单的公式进行计算;第二层是能够成功地运用一些高级函数以及Excel自身的高级功能分析数据,进行一些较为复杂的数据处理工作;第三层就是利用VBA技术扩展Excel的功能,对Excel四大银行是哪四大进行二次开发,让它按照我们的意愿去处理相应的工作。通过学习和使用VBA技术,我们会看到Excel的另一片天地,这也是我们之所以要努力修炼到第三层的目的:我们要随心所欲地让Excel老老实实地为我们工作。
需要说明的是,我不是在写教科书,所以今后我们交流的内容,将不会以各种概念为主,而会以实例和操作为主,而且介绍的实例也以能解决我们的实际问题为主。在学习过程中,我将参考一些专业书籍,选用一些网络上流行的代码,在此就不一一注明原出处。对其中可能引用的部分经典代码,在此先向原编写者致谢。
好了,从现在开始,让我们携手共同走进Office VBA的神奇世界。
网友学VBA(2)- 什么是VBA
我第一次亲密接触VBA时,还在做一种叫“税收会计”的工作。在使用Excel办公时,我对一次又一次的重复任务感到厌倦,就想到一种能够自动重复任务的办法。很快,我在Excel中发现了“宏”,发现它就是我要的东西,大喜!之后,我又发现了“VBA”,狂喜!
说心里话,我其实不喜欢VBA,所有与编程有关的东西我都不喜欢。但我喜欢VBA能帮我实现高效办公,并且是在我没有编程基础的情况下。专家说:不用编写一行代码,就可以使用VBA。这太好了!
在学习和使用VBA之前,对有些概念的理解,我们是无法避免的,否则,就不会知道自
己要做什么、如何做。咱们得明明白白地做事,你可不能嫌我烦。
VBA的全称是Visual Basic for Application,它是微软开发出来的、在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。我们可以用它来创建自定义的解决方案。所谓应用程序自动化,是指通过编写程序让常规应用程序(如Excel、Word、Access等)自动完成工作。
页眉横线 VBA本来是Office中包含的一种用来扩展Office功能的Basic语言,最早出现在Office97中,而且Excel是最早支持VBA的组件。
VBA可以在Office各组件中通用。当你学会了在Excel中使用VBA,就已经具备了在其他Office组件中使用VBA的基本知识。另外,AutoCAD,CorelDRAW等应用程序的新版本中也集成了VBA。
也许有的朋友会问,Excel不是本来就有自动功能吗?如自动求和、自动套用格式、排序、筛选、数据透视等等。但你说的都是一些单步性的工作,是狭义的自动化。而使用VBA,我们可以只发出一个指令(如单击一个按钮),就可以让Excel乖乖地替我们完成剩
下的工作:将一个文件中的数据逐条录入到一个工作表中→排序→删除重复的数据→进行求和计算→画上表格边框→进行页面设置→打印输出……一系列的工作,很可能就在一瞬间完成!酷吧!难怪有人说,VBA是Excel的“遥控器”。
酷是酷,但有两点我得忠告大家:第一点,虽然VBA上手很容易,但也不至于容易到像我们给mm写情书一样随手就来,想成为高手,还须多年磨练啊!(呵呵,写一封让mm动心的情书亦非易事啊!)第二点,我们也不要到处去用VBA,因为一些简单的工作或一次性的工作,还不如手工去完成它,否则,你的代码还没有写完,人家的工作早已完成了,并翘着腿坐在你旁边喝着咖啡鄙视着你呢。所以,VBA还是应用在那些比较复杂、重复性的、劳动量大的工作上,所谓“好钢用在刀刃上”嘛。
在继续深入学习VBA理论之前,我们先来看一个VBA实例。
我们要解决的问题是:在Excel乘风破浪的分数中实现人民币金额中文大写这一功能,即在一个单元格中输入小写金额数字,而在另一个单元格自动显示中文大写金额。
那么Excel有没有提供这种功能呢?先看看再说吧。
打开Excel工作簿,在工作表的A1单元格输入数字100815.96,在工作表的B1单元格中输入公式“=A1”,右击B1世界建筑单元格,在弹出菜单中点“设置单元格格式”,在出现的对话窗口中点选“数字”标签,在分类列表中选择“特殊/中文大写数字”,这时单元格B1中显示的结果为“壹拾万零捌佰壹拾伍.玖陆”。(图1)看来,Excel中是有中文大写功能的,只是没有显示“元、角、分、整”的功能,不能解决中文金额大写的问题。微软也真是的,做事留一手,这不是明摆着欺负咱们中国人吗?
(万里长城的历史资料图1)
那么,我们只能自己解决问题了。
有两种方法可行:一是使用IF函数。这种方法需要使用IF函数多层嵌套才能实现,但是自己看着都晕,容易出错,使用和维护不便,所以我就不作推荐了。另一种方法就是自定义函数,这是我要向大家着重介绍的。
先给这个自定义函数取个名儿,它的中文名叫“大写金额”,英文名叫“dxje()”。呵呵,跟小沈阳学的。
编写函数的代码如下:
Function dxje(q)
ybb = Round(q * 100) '将输入的数值扩大100倍,进行四舍五入
Y = Int(ybb / 100) '截取出整数部分
j = Int(ybb / 10) - Y * 10 '截取出十分位
f = ybb - Y * 100 - j * 10 '截取出百分位
zy = Application.WorksheetFunction.Text(Y, "[DBNum2][$-804]General") '将整数部分转为中文大写
发布评论