Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > 综合其它

VBA过程的调用(含过程名称为变量时的方法)

时 间:2012-07-07 23:23:01
作 者:王度兰亭   ID:26851  城市:太原
摘 要:过程调用方法
正 文:

 原文地址:http://hi.baidu.com/fightiger/item/6adce40f10c35bce75cd3cc0

【不带变量调用】

一般在VBA里,我们调用某个过程,都会用Call语句,先说说用Call语句直接调用某个过程的方法

例如你有一个过程aa如下:
Sub aa()
Msgbox "喵喵", 64
End Sub

那么调用这个过程的方法为:
Sub Call_aa_01()
aa
End Sub

这里,call语句里的call是可以省略的,但为了令代码更清晰,一般程序员会喜欢加上去,以表示aa是一个过程:
Sub Call_aa_02()
Call aa
End Sub

如果aa是一个带有参数的过程,如:
Sub aa(str As String)
MsgBox str, 64
End Sub

那么在用call语句调用的时候,就要这样(不带Call):
Sub Call_aa_03()
aa "喵喵"
End Sub

或者这样(带Call):
Sub Call_aa_04()
Call aa ("喵喵")
End Sub

这里值得注意的是,调用过程的名称如果在整个过程里不是唯一的,即其他模块也有相同名称的过程,那么在调用其他模块里的同名过程时,需要加上模块的名称,如模块1和模块2同时存在过程aa,在模块1里想调用模块2的过程aa,那么必须加上模块2做前缀,否则只会调用同模块下的aa:
Sub Call_aa_05()
Call 模块2.aa
End Sub

如果aa是在另外一个工作簿里,需要先在VBE-工具-引用,添加引用的工作簿(通常会显示该工作簿的工程名称,如VBAProject1;有多个工程相同时应把自身的工程名删除后再添加personal的工程名),再加上工程名加以调用,这里要注意,相互调用的工作簿是要打开的,而且工程名称不能重复,不然不能引用。如:
Sub call_aa_06()
Call VBAProject1.模块2.aa
End Sub

同时,有多个过程aa时,一样需要加上模块名称,只有一个的话模块名称可省略:
Sub call_aa_07()
Call VBAProject1.aa
End Sub

【带变量调用】

好了,以上是传统的调用方法,如果过程名称aa是一个变量呢?我们注意到用Call语句,后面的过程名称不可以是变量,例如以下的调用是行不通的:
Sub Call_aa_08()
Dim str As String
str = "aa"
Call str
End Sub

我们要用另一种方法,Application.run方法来调用过程名是变量的过程:
Sub Call_aa_09()
Dim str As String
str = "aa"
Application.Run str
End Sub

如果用run方法来调用带参数的过程,则这样,多个参数用逗号分隔:
Sub Call_aa_10()
Dim str As String
str = "aa"
Application.Run str, "喵喵"
End Sub

Run方法处理同名过程和Call语句不一样,只要在工作簿中存在相同的名称,即使是工作表里定义的名称,像上一个过程的写法就会报错(没有找到过程或者工程错误),也必须在过程名前加上模块名称(注意点不要漏了),如:
Sub Call_aa_11()
Dim str As String
str = "aa"
Application.Run "模块2." & str, "喵喵"
End Sub

引用其他工作簿(该工作簿必须是打开的),如Book1里的过程则需要加上工作簿名称(注意引号不要漏了),如:
Sub Call_aa_12()
Dim str As String
str = "aa"
Application.Run "Book1!模块2." & str, "喵喵"
End Sub



Access软件网QQ交流群 (群号:483923997)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助