设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

123
返回列表 发新帖
楼主: tanhong
打印 上一主题 下一主题

VBA代码编程方法详解

[复制链接]
3#
 楼主| 发表于 2010-10-31 15:03:30 | 只看该作者
4.2 移除工程中部件
4.2.1 移除当前工程部件自定义过程

  1. '***********************************************
  2. '公用过程:移除指定部件或删除某类部件
  3. 'ComponentType部件类别(可选参数),默认为标准模块
  4. 'VBCompName部件名(可选参数),默认不指定部件名
  5. '************************************************
  6. Public Sub RemoveVBComponents (Optional VBCompType As vbext_ComponentType, _
  7.                               Optional VBCompName As String = "")
  8.    Dim VBProj     As VBProject      '申明工程对象
  9.    Dim VBComp   As VBComponent   '申明部件对象
  10.    Dim VBComps  As VBComponents  '申明部件集合
  11.    '设定为当前工程
  12.    Set VBProj = VBE.ActiveVBProject
  13. '设定为当前工程部件
  14.    Set VBComps = VBProj.VBComponents
  15.    '判断是否指定部件名,如未指定则删除所有指定类型部件
  16.    If VBCompName <> "" And VBCompType = 0 Then
  17.       VBComps.Remove VBComps (VBCompName)
  18.    Else
  19.       For Each VBComp In VBComps
  20.          If VBComp.Type = VBCompType Then
  21.             VBComps.Remove VBComps (VBComp.Name)
  22.          End If
  23.       Next
  24.    End If
  25. End Sub
复制代码

4.2.2 调用自定义过程,移除指定类型所有部件示例
  1. '移除指定所有类模块
  2. Call RemoveVBComponents(vbext_ct_ClassModule)
复制代码


4.2.3  调用自定义过程,移除指定名部件示例(无需指定部件类型)
  1. '移除指定名部件,实例:指定“我的窗体”
  2. Call RemoveVBComponents(, "我的窗体")
复制代码


4.3 列举部件名及类型信息
4.3.1 获得部件类型自定义函数

  1. '------------------------------------------------------------
  2. '函数功能:根据所获取部件类型常量值,获得部件类别名
  3. '------------------------------------------------------------
  4. Function ComponentTypeToString (ComponentType As vbext_ComponentType) As String
  5.    Select Case ComponentType
  6.       Case vbext_ct_ClassModule
  7.          ComponentTypeToString = "类模块"
  8.       Case 100
  9.          ComponentTypeToString = "其它"
  10.       Case vbext_ct_MSForm
  11.          ComponentTypeToString = "微软窗体"
  12.       Case vbext_ct_StdModule
  13.          ComponentTypeToString = "标准模块"
  14.       Case Else
  15.          ComponentTypeToString = "未知类: " & CStr(ComponentType)
  16.    End Select
  17. End Function
复制代码


4.3.2 获取工程中所有部件名及类型自定义函数

  1. '-------------------------------------------------------------------
  2. '函数功能:列出所有部件名及类型
  3. '调    用:ComponentTypeToString 函数,获取部件类型
  4. '------------------------------------------------------------------
  5. Public Function AllVBComponentsAndType () As String
  6.    Dim VBComp    As VBComponent     '申明工程部件
  7.    Dim VBComps   As VBComponents     '申明部件集合
  8.    Dim strComps    As String             '输出结果
  9.    Dim strObjName  As String             '对象名
  10.    Dim strType      As String             '类型名
  11.    
  12.    Set VBComps = VBE.ActiveVBProject.VBComponents
  13.    '遍历部件集合,将部件名及类型值赋值给变量
  14.    For Each VBComp In VBComps
  15.       strObjName = VBComp.Name
  16.       strType = ComponentTypeToString(VBComp.Type)
  17.       '如果为其它类型,判断是ACCESS窗体、报表或其它对象
  18.       If strType = "其它" Then
  19.          If InStr(strObjName, "Form") > 0 Then
  20.             strType = "窗体"
  21.          ElseIf InStr(strObjName, "Report") > 0 Then
  22.             strType = "报表"
  23.          Else
  24.             strType = "其它"
  25.          End If
  26.       End If
  27.       '将获取的部件名及类型逐行输出
  28.       strComps = strComps & strObjName & Space (12) & strType & vbCrLf
  29.    Next
  30.    AllVBComponentsAndType = strComps   '赋值输出
  31. End Function
复制代码
2#
 楼主| 发表于 2010-10-31 14:59:54 | 只看该作者
本帖最后由 tanhong 于 2010-10-31 15:02 编辑

三、工程对象(Project)
  表示一个工程。可用 VBProject对象设置工程的属性、访问 VBComponents集合以及访问 References集合。通常我们会用ActiveVBProject返回“工程”窗口中选定的工程,但在实际编程中,无论此工程是否被显式地选定,都只有一个工程是活动的。

3.1判断工程是否锁定
  通过工程Protection属性,判断工程锁定状态。工程Protection属性(只读),指示工程是否处于保护状态。返回的值为一事先定义好的常量,表示工程的状态。
Protection属性常量:
常数
描述
Vbext_pp_none
0
常量代表指定的工程未被保护。
vbext_pp_locked
1
常量代表指定的工程是被锁住。


3.1.1
判断工程是否锁定自定义函数


  1. '函数功能:判断工程是否锁定
  2. Public Function VBProjectlocked (Optional VBProj As VBProject = Nothing) As Boolean
  3.    Dim Proj   As VBProject
  4.    
  5. '如未指定工程,则为当前工程
  6.    If VBProj Is Nothing Then
  7.       Set Proj = VBE.ActiveVBProject
  8.    Else
  9.       Set Proj = VBProj
  10.    End If
  11.    
  12. '判断工程是否锁定
  13.    If Proj.Protection = vbext_pp_locked Then
  14.       VBProjectlocked = True
  15.    Else
  16.       VBProjectlocked = False
  17.    End If
  18. End Function
复制代码


3.1.2调用自定义函数,判断当前工程是锁定示例

  1.   '函数输出为真(True),否则当前工程锁定
  2. If VBProjectlocked = True Then
  3.       MsgBox "工程已锁定"
  4.    Else
  5.       MsgBox "工程未锁定"
  6.    End If
复制代码

3.2 获得工程名
  1. '获得当前工程名
  2. VBE.ActiveVBProject.Name
复制代码


四、部件对象(VBComponent)
  代表一个包含在工程中的部件,例如类模块或标准模块。使用 VBComponent对象访问与部件关联的代码模块CodeModule或改变部件的属性设置。

4.1 添加工程部件
4.1.1向当前工程添加部件公用过程

  1. '***************************************************
  2. '公用过程:添加模块或指定名模块
  3. ' ComponentType部件类型(可选参数),默认为标准模块
  4. ' VBCompName部件名(可选参数),默认不指定部件名
  5. '***************************************************
  6. Public Sub AddVBComponents (Optional ComponentType As vbext_ComponentType=1, _
  7.                           Optional VBCompName As String = "")
  8.    Dim VBProj      As VBProject       '申明工程(项目)对象
  9.    Dim VBComps    As VBComponents  '申明部件集合
  10.    '设定为当前工程
  11.    Set VBProj = VBE.ActiveVBProject
  12. 设定为当前工程部件集合
  13.    Set VBComps = VBProj.VBComponents
  14.   
  15. '判断是否指定部件名,未指定则按默认名建立指定类型部件
  16.    If VBCompName = "" Then
  17.       VBComps.Add (ComponentType)
  18.    Else
  19.       VBComps.Add (ComponentType).Name = VBCompName
  20.    End If
  21. End Sub
复制代码


4.1.2调用自定义过程,添加标准模块
  1. '例一:以默认名添加标准模块
  2. Call AddVBComponents
  3. '例二:以指定名“我的模块”添加标准模块
  4. Call AddVBComponents(, "我的模块")
复制代码


4.1.3调用自定义过程,添加类模块
  1. '例一:以默认名添加类模块
  2. Call AddVBComponents(2)

  3. '例二:以指定名“我的类模块”添加标准模块
  4. Call AddVBComponents(2, "我的类模块")
复制代码


4.1.4 调用自定义过程,添加(MSForm)窗体
  1. '例一:以默认名添加MSForm窗体
  2. Call AddVBComponents(3)

  3. '例二:以指定名“我的窗体”添加MSForm窗体
  4. Call AddVBComponents(3, "我的窗体")
复制代码


说明:这里窗体是指“Microsoft窗体”,而非ACCESS通常意义所说的窗体,ACCESS窗体实际为ACCESS类对象,你可以通过CreateForm方法创建一个ACCESS对象窗体。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-6-7 14:42 , Processed in 0.096642 second(s), 25 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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