【不帶變量調(diào)用】
一般在VBA里,我們調(diào)用某個過程,都會用Call語句,先說說用Call語句直接調(diào)用某個過程的方法
例如你有一個過程aa如下:
Sub aa()
Msgbox "喵喵", 64
End Sub
那么調(diào)用這個過程的方法為:
Sub Call_aa_01()
aa
End Sub
這里,call語句里的call是可以省略的,但為了令代碼更清晰,一般程序員會喜歡加上去,以表示aa是一個過程:
Sub Call_aa_02()
Call aa
End Sub
如果aa是一個帶有參數(shù)的過程,如:
Sub aa(str As String)
MsgBox str, 64
End Sub
那么在用call語句調(diào)用的時候,就要這樣(不帶Call):
Sub Call_aa_03()
aa "喵喵"
End Sub
或者這樣(帶Call):
Sub Call_aa_04()
Call aa ("喵喵")
End Sub
這里值得注意的是,調(diào)用過程的名稱如果在整個過程里不是唯一的,即其他模塊也有相同名稱的過程,那么在調(diào)用其他模塊里的同名過程時,需要加上模塊的名稱,如模塊1和模塊2同時存在過程aa,在模塊1里想調(diào)用模塊2的過程aa,那么必須加上模塊2做前綴,否則只會調(diào)用同模塊下的aa:
Sub Call_aa_05()
Call 模塊2.aa
End Sub
如果aa是在另外一個工作簿里,需要先在VBE-工具-引用,添加引用的工作簿(通常會顯示該工作簿的工程名稱,如VBAProject1;有多個工程相同時應(yīng)把自身的工程名刪除后再添加personal的工程名),再加上工程名加以調(diào)用,這里要注意,相互調(diào)用的工作簿是要打開的,而且工程名稱不能重復(fù),不然不能引用。如:
Sub call_aa_06()
Call VBAProject1.模塊2.aa
End Sub
同時,有多個過程aa時,一樣需要加上模塊名稱,只有一個的話模塊名稱可省略:
Sub call_aa_07()
Call VBAProject1.aa
End Sub
【帶變量調(diào)用】
好了,以上是傳統(tǒng)的調(diào)用方法,如果過程名稱aa是一個變量呢?我們注意到用Call語句,后面的過程名稱不可以是變量,例如以下的調(diào)用是行不通的:
Sub Call_aa_08()
Dim str As String
str = "aa"
Call str
End Sub
我們要用另一種方法,Application.run方法來調(diào)用過程名是變量的過程:
Sub Call_aa_09()
Dim str As String
str = "aa"
Application.Run str
End Sub
如果用run方法來調(diào)用帶參數(shù)的過程,則這樣,多個參數(shù)用逗號分隔:
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