开头:调用宏或函数(SUB/Function)需是常规或公用声明(Public)
本次测试用工作本与调用的宏如图:
待调用宏1.XLS:
Sub st1() MsgBox "表1.xls!Sheet1的宏" End Sub Sub tt1() MsgBox "表1.xls!ThisWorkbook的宏" End Sub
Sub mt1() MsgBox "表1.xls!模块的宏" End Sub
待调用宏2.XLS:
Sub abc1() MsgBox "写在表2.xlsm!ThisWorkbook的宏" End Sub Public Sub abc11() MsgBox "写在表2.xlsm!ThisWorkbook的宏2" End Sub Private Sub abc22() MsgBox "写在表2.xlsm!ThisWorkbook的私有宏" End Sub
'写在表2模块1上的宏 Sub abc2() MsgBox "a11" End Sub Sub abc3(a3 As String) MsgBox a3 End Sub Sub abc4(a4 As Integer, b4 As Integer, c4 As Integer) Dim d4 As Integer d4 = a4 + b4 + c4 MsgBox d4 End Sub
写在测试.XLSM模块1的宏
Sub mt1() MsgBox "1" End Sub
选项默认加载信任中心要启用宏(有风险,测试使用)本次测试为2013版OFFICE
一、Call用法
Sub Call1()
Dim str As String '定义一个文本
str = "abc2" '把文本写入变量"
Call str '直接call变量
Call abc2 '直接call宏名
End Sub
Sub call2()
Call abc3("文本") 'Call有参数的宏时添加参数
Call abc4(3, 4, 5) 'Call多参数
End Sub
Sub call3()
Call ThisWorkbook.abc1
Call ThisWorkbook.abc11
'Call ThisWorkbook.abc22 '方法成员未找到,因为是私有
End Sub
用法小结:
1、CaLL可以接变量或真接宏名调用,写在同一页面下的宏可以直接调用。
2、CaLL带参数的宏正常括号后接参数。
3、适用于本工作本下的非私有宏或自定义函数,格式CALL + 宏名 或者先定义变量装入宏名调用。不同模块下需加上模块名。
二、APPLICATION.RUN用法
Sub run1()
'Application.Run "abc2" '写在XLS格式里的可以直接这样调用
Application.Run "模块2.Abc2" '写在97以上的版本需写明在哪里的宏名,不区分大小写
Application.Run ("模块2.abc3(""文本123"")") '调用本模块叁数文本的宏
Application.Run "模块2.abc4(1,2,3)" '调用本模块多参数的宏
End Sub
Sub run2()
'调用本工作本下不同模块的宏
Application.Run "ThisWorkbook.aBC1"
End Sub
Sub run3()
'调用另一个工作本下模块的宏
'另一工作本已打开的情况下:run 工作表名!位置.宏
Dim str3 As String
str3 = "1.xls!" & "模块1.mt1"
Application.Run sstr3
End Sub
Sub run4()
'调用另一个工作本下模块的宏
'另一工作本未打开的情况下:run '工作本路径.工作表名'!位置.宏
Dim str4 As String
str4 = "'" & ThisWorkbook.Path & "\" & "测试.xlsm" & "'" & "!模块1.mt1"
Application.Run sstr3 '调用指定位置工作本会把其打开
Application.Workbooks("测试.xlsm").Close '调用后关闭
End Sub
用法小结:
1、调用名不区分大小写。 2、RUN "模块名.宏名" 等同于 RUN ("模块名.宏名") 3、application.run 在xls格式下可以直接引用单宏名(模块名/宏名不重复情况下),XLSX以上需带上模块名 + 宏 4、调用未打开的宏要指定路径加工作本名,注意加单引号。添加文本参数时要用""双引号。调用未打开的工作本宏后会打开目标工作本。
结语:非必要还是尽量把经常要调用的宏写在同一工作本,或单独整一个做用调用宏工作本(部分版本打开工作本时也会有一个专门存宏的工作本)。也可以通过加载宏选项引用官方加载项(就打开工作本的时候会默认打开一个加载工作本)把宏都存于加载表里。
微软官方的这几个加载宏的默认密码码如下 ATPVBACS.XLA Wildebeest!! ATPVBAEN.XLA Wildebeest!! EUROTOOL.XLA EXPTOOWS.XLA FUNCRES.XLA Wildebeest!! HTML.XLA Weezaarde!? LOOKUP.XLA PROCDB.XLA Wildebeest!! SOLVER.XLA Wildebeest!!