VBA语言学习.docx
- 文档编号:2981372
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:35
- 大小:1.27MB
VBA语言学习.docx
《VBA语言学习.docx》由会员分享,可在线阅读,更多相关《VBA语言学习.docx(35页珍藏版)》请在冰豆网上搜索。
VBA语言学习
网友学VBA
(1)- 写在前面的话
各位爱好钻研Office技术的网友,你们好!
从今天开始,我将在我的博客中增加一个新的文章类别,即“和网友一起学VBA(Visual Basic forApplication)”,简称“网友学VBA”。
我将把它作为一个专门系列,与我博客中的文学系列和税务系列并存,长期地写下去,同网友们一起交流学习心得,分享学习经验,共同提高VBA编程水平。
在实践中,VBA在Excel当中应用得最为广泛,也最有价值,能够高效、灵活地扩展Excel的功能,为处理大批量的、复杂的数据带来方便。
因此,我们的讨论将以ExcelVBA为主要内容,兼顾其他Office组件。
我个人认为,修炼Excel高手有三个层次。
第一层是能够熟练地制作电子表格,并运用一些常用的、简单的公式进行计算;第二层是能够成功地运用一些高级函数以及Excel自身的高级功能分析数据,进行一些较为复杂的数据处理工作;第三层就是利用VBA技术扩展Excel的功能,对Excel进行二次开发,让它按照我们的意愿去处理相应的工作。
通过学习和使用VBA技术,我们会看到Excel的另一片天地,这也是我们之所以要努力修炼到第三层的目的:
我们要随心所欲地让Excel老老实实地为我们工作。
需要说明的是,我不是在写教科书,所以今后我们交流的内容,将不会以各种概念为主,而会以实例和操作为主,而且介绍的实例也以能解决我们的实际问题为主。
在学习过程中,我将参考一些专业书籍,选用一些网络上流行的代码,在此就不一一注明原出处。
对其中可能引用的部分经典代码,在此先向原编写者致谢。
好了,从现在开始,让我们携手共同走进OfficeVBA的神奇世界。
网友学VBA
(2)- 什么是VBA
我第一次亲密接触VBA时,还在做一种叫“税收会计”的工作。
在使用Excel办公时,我对一次又一次的重复任务感到厌倦,就想找到一种能够自动重复任务的办法。
很快,我在Excel中发现了“宏”,发现它就是我要的东西,大喜!
之后,我又发现了“VBA”,狂喜!
说心里话,我其实不喜欢VBA,所有与编程有关的东西我都不喜欢。
但我喜欢VBA能帮我实现高效办公,并且是在我没有编程基础的情况下。
专家说:
不用编写一行代码,就可以使用VBA。
这太好了!
在学习和使用VBA之前,对有些概念的理解,我们是无法避免的,否则,就不会知道自己要做什么、如何做。
咱们得明明白白地做事,你可不能嫌我烦。
VBA的全称是VisualBasicforApplication,它是微软开发出来的、在其桌面应用程序中执行通用的自动化(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(3)- 在Excel中实现金额数字中文大写
在继续深入学习VBA理论之前,我们先来看一个VBA实例。
我们要解决的问题是:
在Excel中实现人民币金额中文大写这一功能,即在一个单元格中输入小写金额数字,而在另一个单元格自动显示中文大写金额。
那么Excel有没有提供这种功能呢?
先看看再说吧。
打开Excel工作簿,在工作表的A1单元格输入数字100815.96,在工作表的B1单元格中输入公式“=A1”,右击B1单元格,在弹出菜单中点“设置单元格格式”,在出现的对话窗口中点选“数字”标签,在分类列表中选择“特殊/中文大写数字”,这时单元格B1中显示的结果为“壹拾万零捌佰壹拾伍.玖陆”。
(图1)看来,Excel中是有中文大写功能的,只是没有显示“元、角、分、整”的功能,不能解决中文金额大写的问题。
微软也真是的,做事留一手,这不是明摆着欺负咱们中国人吗?
(图1)
那么,我们只能自己解决问题了。
有两种方法可行:
一是使用IF函数。
这种方法需要使用IF函数多层嵌套才能实现,但是自己看着都晕,容易出错,使用和维护不便,所以我就不作推荐了。
另一种方法就是自定义函数,这是我要向大家着重介绍的。
先给这个自定义函数取个名儿,它的中文名叫“大写金额”,英文名叫“dxje()”。
呵呵,跟小沈阳学的。
编写函数的代码如下:
Functiondxje(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")'将整数部分转为中文大写
zj=Application.WorksheetFunction.Text(j,"[DBNum2][$-804]General")'将十分位转为中文大写
zf=Application.WorksheetFunction.Text(f,"[DBNum2][$-804]General")'将百分位转为中文大写
dxje=zy&"元"&"整"
d1=zy&"元"
Iff<>0Andj<>0Then
dxje=d1&zj&"角"&zf&"分"
IfY=0Then
dxje=zj&"角"&zf&"分"
EndIf
EndIf
Iff=0Andj<>0Then
dxje=d1&zj&"角"&"整"
IfY=0Then
dxje=zj&"角"&"整"
EndIf
EndIf
Iff<>0Andj=0Then
dxje=d1&zj&zf&"分"
IfY=0Then
dxje=zf&"分"
EndIf
EndIf
Ifq=""Then
dxje=0'如没有输入任何数值为0
EndIf
EndFunction
什么?
你看不懂!
不要紧,以后会懂的,现在只要跟着做就行了。
第一步,复制上面的代码。
(意外情况告知:
有时候在网页上复制的代码可能含有一些网页特有格式,所以最好先将代码复制到记事本中过滤一下,去掉网页格式,再从记事本中复制干净的代码进行粘贴操作。
这我以后就不一一说了。
当然,这里应当不存在这个问题。
)
第二步,打开创建宏的对话窗口。
Excel2007中是在“开发工具/宏”菜单下,Excel2003是在“工具/宏/宏”菜单下。
在“宏名”中输入“dxje”。
(图2)
(图2)
第三步,在“宏”对话窗口中,单击“创建”按钮,会打开VisualBasic编辑器(VBE),先将代码窗口中系统自动生成的两行代码清除,再将我们先前复制好的自定义函数代码粘贴上去(图3),然后点VBE菜单“文件/关闭并返回到MicrosoftExcel”,返回到刚才的工作表中来。
(图3)
当然,Excel2003中我们也可以通过“工具/宏/VisualBasic编辑器/插入/模块”,打开上面的代码窗口。
Excel2007我就不赘述了。
第四步,在单元格B1中输入“=dxje(A1)”,即能正确显示中文大写金额数字,大功告成!
(图4)
小提示:
(1)在“宏安全性”中要设置为“启用所有宏”(或将宏安全级设为低),否则代码不能运行。
Excel2007中从菜单“开发工具/宏安全性”进入设置,Excel2003中从从菜单“工具/宏/安全性”进入设置。
(2)如果你使用的是Excel2007,而不是Excel2003,那么在保存文件时要选择“启用宏的工作薄”。
我觉得,由于目前Excel2003在实践中仍占主导地位,所以建议您保存为“Excel97-2003工作薄”类型,即文件扩展名只有3位的“.xls”的Excel文件,以免引起兼容方面的麻烦。
(3)如果你想在大写金额前面加上“人民币”三个字,可以这样输入公式:
="人民币"&dxje(A1)。
注意引号必须在英文状态下输入。
网友学VBA(4)- VBA、VB、VBS的关系
在前面介绍的“中文金额大写”的实例中,自定义函数dxje()的代码就是用VBA语言编写的。
当然啰,你要说是用VB语言编写的,我也不反对,因为VB和VBA的编程语句并没有多大区别,它们的关系十分密切。
你学会了VB,很可能就学会了VBA。
比较的正统的说法是,VBA是VB(VisualBasic)的一个子集,VBA不同于VB,原因是VBA要求有一个宿主应用程序(如:
Word、Excel等)才能运行,而且不能用于创建独立的应用程序;而VB可用于创建独立的应用程序。
不过,只要你愿意,你还是可以把应用程序作为一个平台,然后使用VBA技术创建一个自己的、独特的应用程序。
比方说,你完全可以用Excel+VBA开发一套小型财务处理系统。
有人将VBA、VB的区别总结为4点:
1.VB是设计用于创建标准的应用程序,而VBA是使已有的应用程序(Excel等)自动化。
2.VB具有自己的开发环境,而VBA必须寄生于已有的应用程序。
3.要运行VB开发的应用程序,用户不必安装VB。
因为VB开发出的应用程序是可执行文件(*.EXE),而VBA开发的程序必须依赖于它的“父”应用程序,例如Excel。
4.VBA实际上是脚本语言,可以解释执行;VB则需编译才能
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VBA 语言 学习
![提示](https://static.bdocx.com/images/bang_tan.gif)