ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1395|回复: 0

VBA基础知识(三)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-7-9 16:43 | 显示全部楼层 |阅读模式
1.子过程
子过程是一系列由Sub和End Sub语句所包含起来的VBA语句,它们会执行动作却不能返回一个值。使用子过程可以执行动作、计算数值以及更新并修改内置的属性设置。
Sub语句必须声明一个子过程名。对于事件除了过程有非常程式化的名称,过程命名通常要进循标准的变量命名约定,必须以字母开头,长度不能超过255个字符,不能包含空格和标点,不能是VBA的关键字、函数和操作符名称。子过程可有参数,例如常数、变量、或是表达式等来调用它。如果一个子过程没有参数,则它的子语句必须包含一个空的圆括号。
可以在VBA的代码窗口中直接输入代码编写子过程,例如下面的代码实现了两个简单的子过程。其中Int_Add 子过程求两个整数的和,并将其输出到立即窗口中,Demo子过程则调用Int_Add子过程求1和2的和。
Sub demo()
Call lnt_Add(l, 2) '调用lnt_Add子过程求1和2的和
End Sub
Sub int_add(a As Integer, b As Integer)
Dim Result As Integer
Result -a + b
Debug.Print Result
End Sub
将这段代码粘贴到一个新建的模块中,单击工具栏上的“运行”命令按钮,在弹出的如图所示的“宏”对话框中选择运行“Demo”子过程。
运行结果下图所示
        在Access的窗体的“设计视图”中,使用工具栏的“控件向导”命令,在往窗体中添加控件的同时,会有向导提示自动生成30多个功能的VBA代码。可以在窗体的设计视图中,将工具栏上的“控件向导”命令按钮激活。例如,这时候选择按钮控件在窗体上绘制,然后会出现如下图所示的“命令按钮向导”对话框,可以在其中选择不同的操作,则会依据所选的操作生成相应的子过程。

        这里选择了关闭窗口的操作,则生成了如下的关闭窗口的子过程代码。
Private Sub Close_Cmd_Click()
     On Error GoTo Err_Close_Cmd_Click
     DoCmd.Close
Exit_Close_Cmd_Click:
     Exit Sub
Err_Close_Cmd_Click:
     MsgBox Err.Description
     Resume Exit_Close_Cmd_Click
End Sub
2.函数过程
函数过程是一系列由Function和End Function语句所包含起来的VBA语句。函数过程和子过程有两点不同,首先,函数可以返回一个值,所以在表达式中可以将其当作变量一样使用;其次,函数不能作为事件处理过程。其他方面二者很类似,例如,Function过程可经由调用者过程传递参数,常数、变量或是表达式等都可用来调用它。函数要在过程的—个或多个语句中指定一个值给函数名称来返回值。
下面这个函数过程是求两个整数的和,将这段代码粘貼在代码窗口中,可以通过在立即窗口中输入一个问号后接函数名来激活函数,如下图所示。激活这个函数,求3与4的和为7。
Function Int_Sum(a As Integer, b As Integer)
     Dim Result As Integer
     Int_Sum = a + b
End Function


3.属性过程
Property过程是一系列的Visual Basic语句,它允许程序员去创建并操作自定义的属性。Property过程可以用来为窗体、标准模块以及类模块创建只读属性。声明Property过程的语法如下所示:
[Public|Private] [Static] Property {Get|Let|Set}属性名[(参数) ][As 类型]
语句
End Property
Property过程通常是成对使用的,Property Let与Property Get 一组,而Property Set与Property Get —组,这样声明的属性既可读又可写。单独使用一个Property Get过程声明一个属性,那么这个属性是只读的。Property Set与Property Let功能类似,都可以设置属性。不同的是Property Let将属性设置为等于一个数据类型,而Property Set则将属性设置等于一个对象的引用。
例如,下面的代码使用了 Property Let语句,定义给属性賦值的过程,使用Property Get语句,定义获取属性值的Property过程。该属性用来标识画笔的当前颜色。
Dim CurrentColor As Integer
Const BLACK = 0, RED = 1, GREEN = 2, BLUE = 3
'设置绘图盒的画笔颜色属性.
'模块级变量CurrrentColor设为用于绘图的颜色值.
Property Let PenColor(ColorName As String)
     Select Case ColorName    '检査颜色名称字符串
    Case "Red"
         CurrentColor = RED  '设为Red.
     Case "Green"
         CurrentColor = GREEN    'Green.
     Case "Blue"
         CurrentColor = BLUE   '设为Blue.
     Case Else
         CurrentColor = BLACK  '设为缺省值.
     End Select
End Property
'用一个字符串返回画笔的当前颜色.
Property Get PenColor() As String
     Select Case CurrentColor
     Case RED
         PenColor = "Red"
     Case GREEN
         PenColor = "Green"
     Case BLUE
         PenColor = "Blue"
     End Select
End Property
'下面的代码通过调用Property Let过程
'来设置绘图盒的PenColor厲性.
PenColor = "Red"
'下面的代码通过调用Property Get过程
'来获取画笔的颜色.
ColorName = PenColor
4.类模块
类模块是包含新对象的定义的模块。当创建类的新实例时,即创建新对象。模块中定义的过程成为该对象的属性和方法。类模块有3种基本变形:窗体类模块、报表类模块和自定义类模块。
窗体模块中包含了在指定的窗体或其控制的事件所触发的所有事件过程的代码。这些过程用于响应窗体中的事件。可以使用亊件过程来控制窗体的行为,以及它们对用户操作的响应。报表模块与窗体模块类似,不同之处是工程响应和控制的是报表的行为。
数据库的每一个窗体/报表都有内置的窗体观表模块,这些模块包贪事件过程模板。可以向其中添加程序代码,使得当窗体/报表或其上的控件中发生相应的事件时,运行这些程序代码。
自定义类模块不与窗体和报表相关联,允许用户定义自己的对象、属性和方法。
5.标准模块
在标准模块中,放置希望供整个数据库中其他过程使用的过程,这些过程不与任何对象相关联。单击“数据库”窗口中的“模块”选项卡,可以查看数据库中标准模块的列表。
类模块和标准模块的不同点在于存储数据方法的不同。标准模块的数据只有一个备份。这意味着标准模块中一个公共变虽的值改变以后,在后面的程序中再读取该变最时,它将得到改变后的值。而类模块的数据,是相对于类实例(也就是由类创建的每一对象)而独立存在的。
同样,标准模块中的数据在程序作用域内存在,也就是说,它存在于程序的存活期中。而类模块实例中的数据只存在于对象的存活期中,它随对象的创建而创建,随对象的撤消而消失。
最后,当变量在标准模块中声明为Public时,则它在工程中任何地方都是可见的。而类模块中的Public变量,只有当对象变量含有对某一类模块实例的引用时才能访问。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 19:01 , Processed in 0.031786 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表