一、VBA程序的结构特征
 
  1、宏语言概述
 
  Excel可以广泛地应用于财务、行政、金融、经济、统计和审计等众多领域,它是一个强有力的信息分析和处理工具。这种力量的源泉之一就是它的宏语言(VBA)。利用VBA所提供的功能,财务管理人员可以按自动方式执行日常的管理、分析、决策任务,还可按需要加入某些自定义功能,直至建立一个完整的财务管理应用系统。
 
  VBA是一种计算机编程语言(第四代语言),用它提供的语句、命令可以编写包含若干指令序列的宏程序,它可以指挥Excel应该进行哪些工作。
 
  宏程序是指用VBA提供的各种函数、语句、对象、方法和属性等编写的程序,在Excel中也称为过程。过程是在VBA模块中一个可执行的VBA程序代码块,过程由程序代码序列组成,这些代码序列组合在一起可以完成某项任务。
 
  VBA中的过程主要可分为两类:子过程与过程函数。
 
  (1)子过程
 
  子过程以SUB语句开始,以END SUB语句结束。过程可以执行某种操作,无返回值。其结构是:
 
  SUB  过程名()
 
  命令序列1
 
  ┇
 
  命令序列N
 
  END SUB
 
  (2)过程函数
 
  过程函数以Function语句开头,以END Function语句结束,可以有返回值。
 
  其结构是:
 
  Function 函数名(参数…)
 
  命令序列1
 
  ┇
 
  命令序列N
 
  End Function
 
  2、宏程序结构与宏程序举例
 
  宏程序是程序语言,所以它也有程序结构。
 
  (1)顺序结构
 
  在正常状况下,宏程序的执行是以“Excel顺序”方式进行的,即由上而下逐一执行。用“Excel宏记录器”记录经常性工作时,它也是“Excel顺序”方式。
 
  ① 打开工作簿的工作表。
 
  ② 进入“工具”菜单栏中“宏”命令下的“Visual Basic编辑器”。
 
  ③ 选择“插入”菜单中“宏表”命令下的“模块表”命令,Excel就会在工作薄中增加一张宏表,并自动命名MODEL1。
 
  ④ 选择MODELl宏表输入宏程序。
 
  (2)条件结构
 
  如果需要对默认条件进行测试,然后根据测试的结果进行不同的操作,就要使用条件结构。
 
  语法:
 
  IF…
 
  THEN…
 
  注意:在单行的IF…THEN语句中不使用End IF语句。若测试的条件为TRUE时需要执行多行程序代码,则必须使用IF…THEN…END IF语句。
 
  (3)循环结构
 
  语法1:
 
  Do  While (条件)
 
  ┇
 
  Loop
 
  语法2:
 
  FOR counter=start TO end [Step increment]
 
  ┇
 
  NEXT [counter]
 
  二、VBA语法的特点
 
  Excel的众多对象之间是相互关联的,构成了一个有机的整体。其中Application对象位于最上层,代表了整个Excel应用程序,包括应用程序的各种选项以及当前活动的各种对象。其下面主要有Workbooks(工作簿集合)对象、Window(窗口)对象、Dialog(对话框)对象等。而Workbooks对象下面又有Worksheets(工作表)对象、Chart(图表)对象、Window(窗口)对象、Name(名称)对象等。Worksheets对象下面还有Range(区域)对象、Name(名称)对象等。其中Application对象下面的Window对象与Workbook对象下面的Window对象是不同的,前者包含了Excel的所有窗口,而后者只包含指定工作簿中的窗口。
 
  VBA主要是根据用户对不同对象的操作、触发的相应事件,去激活相应的程序,通过对相关的对象执行不同的方法或是修改相关对象的属性来完成特定的工作。
 
  Visual Basic 语言有两个基本的语法:
 
  对象。属性
 
  对象。方法
 
  在对象与属性或方法之间需要用一个“。”来隔开。
 
  1、对象,属性
 
  用户可以将Excel中对象的属性内容指定给一个变量或指定对象的属性内容,这些操作的方式有:
 
  (1)将对象的属性内容指定给一个变量
 
  (2)指定对象的属性内容
 
  可以指定对象的属性内容,可被用来指定对象属性的内容有下列3类:
 
  ①数值内容。
 
  ②字符串内容。
 
  ③逻辑内容。
 
  2、对象,方法
 
  三、VBA的界面制作工具
 
  1、绘图工具栏
 
  该工具栏中包括以下工具:
 
  (1)“绘图”选项工具:选择不同的绘图工具。
 
  (2)“自选图形”:自动创建各种不同的图。
 
  (3)直线工具:画直线。
 
  (4)箭头工具:画箭头。
 
  (5)矩形工具:画矩形。
 
  (6)圆形工具:画圆及椭圆。
 
  (7)文字框:在任何图形对象中添加文字(文字水平排列)。
 
  (8)竖形文字框:在任何图形对象中添加文字(文字垂直排列)。
 
  (9)艺术字工具:提供各种艺术字体选项。
 
  (10)填充色工具:修改图形对象中的填充色。
 
  (11)线条颜色工具:修改图形对象中的线条颜色。
 
  (12)字体颜色工具:改变字体颜色。
 
  (13)~(15)线条修改工具:改变线条样式。
 
  (16)阴影工具:为图形及字体设置阴影。
 
  (17)三维设计:设计图形的三维效果。
 
  2、ActiveX控件
 
  现在越来越多的可视化程序设计工具使得用户可以方便地在自定义的对话框中加入图形控件。Excel/VBA也可以在工作表中直接使用各种图形化的控件。这些控件称作ActiveX控件,它们使得宏更容易使用。
 
  添加一个“数值调节钮”控件。从“视图”菜单中选“工具栏”命令,单击“控件工具箱”。单击“控件工具箱”中的“数值调节钮”控件,然后在周期单元格的右侧拖拽出3个大小合适的“数值调节钮”。这时自动进入Visual Basic设计模式,此时的控件周围有控制柄可以拖放它们以改变控件的大小。当鼠标置于控件上时,鼠标指针会变成十字形状,可以拖放控件移动它的位置。
 
  单击“控件工具箱”上的“属性”按钮,在出现的属性窗口中设置Max属性值,Min属性值,LinkCell属性值,SmallChange属性值。
 
  添加滚动条控件。先按创建数值调节钮的方法在D3单元格创建一个滚动条,然后设置Max、Min、SmallChange的属性值。
 
  最后还需要将该工作表保护起来,使得使用者只能通过控件指定数值,而不能在单元格中直接键入数据,否则还会出现错误。
 
  首先,把与控件相连的单元格清除,即不用控件往单元格内填值,转而用事件控制程序往单元格内填写值。单击“控件工具箱”上的“设计模式”按钮,进入“设计模式”。选定*9个滚动条,将它的LinkCell属性清空。再单击“查看代码”按钮,在名为Private Sub ScrollBar1_Change()的事件控制程序中,添加下述语句:
 
  Range(“C3”)。Value = ScrollBar1.Value / 10000
 
  类似地,清除“数字调节钮”和第二个滚动条的LinkCell属性,在ScrollBar2_Change()事件过程中添加语句:
 
  Range(“C5”)。Value = ScrollBar2.Value
 
  在SpinButton1_Change()事件过程中添加语句:
 
  Range(“C4”)。Value = SpinButton1.Value
 
  这些事件控制程序使得单元格中的值随着控件的变化而变化。这时可以保护工作表了。在“工程”窗口中双击ThisWorkbook对象,进入“代码”窗口。在Workbook_Open()事件控制程序中加入下述语句:
 
  Sheets(“Sheet1”)。Protect User InterfaceOnly := True
 
  四、自定义函数
 
  自定义函数的结构与过程的结构非常相似,只是自定义函数的参数是必不可少的,且具有返回值。其基本结构如下所示:
 
  Function 〈函数名〉(〈参数1〉,〈参数2〉,…)
 
  〈语句块〉
 
  End Function
 
  例如用Excel定义个人所得税计算函数。
 
  (1)自定义税率
 
  打开一个工作簿后,选择“工具”/“宏”/“Visual Basic 编辑器”进入VBA环境中,再选择“插入”/“添加模块”,在Module-1窗口中,输入以下程序,便可以在本工作簿中使用此函数。
 
  Public Function 税率(x)
 
  If x<=0 then
 
  税率=0
 
  Elseif x<=500 then
 
  税率=0.05
 
  Elseif x<=2000 then
 
  税率=0.1
 
  Elseif x<=5000 then
 
  税率=0.15
 
  Elseif x<=20000 then
 
  税率=0.2
 
  Elseif x<=40000 then
 
  税率=0.25
 
  Elseif x<=60000 then
 
  税率=0.3
 
  Elseif x<=80000 then
 
  税率=0.35
 
  Elseif x<=100000 then
 
  税率=0.4
 
  else
 
  税率=0.45
 
  endif
 
  end function
 
  (2)自定义速算扣除数函数
 
  方法同上,在Module2_1中输入:
 
  Public Function 扣除数(x)
 
  If x<=500 then
 
  扣除数=0
 
  Elseif x<=2000 then
 
  扣除数=25
 
  Elseif x<=5000 then
 
  扣除数=125
 
  Elseif x<=20000 then
 
  扣除数=375
 
  Elseif x<=40000 then
 
  扣除数=1375
 
  Elseif x<=60000 then
 
  扣除数=3375
 
  Elseif x<=80000 then
 
  扣除数=6375
 
  Elseif x<=100000 then
 
  扣除数=10375
 
  Else
 
  扣除数=15375
 
  endif
 
  end function

 
展开全文