分享

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

 知识VS人生 2013-02-22

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

【不带变量调用】

一般在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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多