VBA(15)调用宏Call与Run

开头:调用宏或函数(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!!

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"Set" 和 "Call" 是 VBA 中的两个关键字,用于不同的目的。 "Set" 用于创建对象引用。通过使用 "Set" 关键字,可以将一个对象赋值给一个对象变量,使得这个变量可以引用该对象,并且可以通过该变量来操作该对象的属性和方法。 例如: ``` Dim myWorksheet As Worksheet Set myWorksheet = ThisWorkbook.Worksheets("Sheet1") myWorksheet.Range("A1").Value = "Hello, World!" ``` 在上面的代码中,我们使用 "Set" 关键字将名为 "Sheet1" 的工作表对象赋值给了 "myWorksheet" 对象变量。然后,我们可以使用 "myWorksheet" 变量引用该工作表,并且向其 A1 单元格写入了 "Hello, World!"。 "Call" 用于调用过程或函数。我们可以使用 "Call" 关键字来显式调用一个过程或函数,也可以直接使用过程或函数名称来调用它们。 例如: ``` Sub MyProcedure() ' 这是一个过程 End Sub Sub AnotherProcedure() ' 调用 MyProcedure 过程 Call MyProcedure End Sub ``` 在上面的代码中,我们使用 "Call" 关键字调用名为 "MyProcedure" 的过程。 需要注意的是,当调用一个函数时,可以使用 "Set" 关键字将该函数返回的对象引用赋值给一个对象变量。例如: ``` Dim myRange As Range Set myRange = Worksheets("Sheet1").Range("A1") ``` 在上面的代码中,我们使用 "Set" 关键字将名为 "Sheet1" 的工作表中的 A1 单元格对象引用赋值给了 "myRange" 对象变量。 综上所述,"Set" 和 "Call" 是 VBA 中的两个不同的关键字,用于不同的目的。"Set" 用于创建对象引用,而 "Call" 用于调用过程或函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值