Excel功能虽强大,但是还存在不能满足我们日常工作的情况,这个时候,很多人选择了宏,通过自己写的宏代码,来实现部分特殊的功能。
然而,很多时候,宏代码只会随着工作薄的打开才能使用,否则将无法使用,比如A工作薄里面的宏,只能在A工作薄中使用,不能在其它工作薄来使用,也就是说,跨表调用宏很难实现。
下面,本文针对这样的问题,来给你介绍些方法,让你能够在不打开工作薄就能运行里面的宏,达到工作薄之间调用宏的效果。
假设有两个工作薄,其名称分别为:MyRun1.xls和MyRun2.xls
其中,在MyRun1.xls工作薄里面,有一个宏,其名称为:MyTest1
注意哦,MyTest1这个宏是MyRun1.xls这个工作薄里面的。
现在,我们要做的是,在MyRun2.xls中,要直接调用MyRun1.xls里面的MyTest1。
方法有两种,估计你会用得上:
方法一:
在MyRun2.xls的VBA代码中,使用如下的这行代码
Application.Run "'MyRun1.xls'!MyTest1"
这样,你就能在MyRun2.xls调用MyRun1.xls里面的MyTest1
注意,这种方法的缺点就是,你必须先打开MyRun1.xls,这样,在MyRun2.xls中才能调用MyRun1.xls里面的MyTest1,否则将报错。调用的和被调用的工作薄,都必须要打开,否则就失败。
方法二:
使用方法2呢,就灵活多了,无论被调用的工作薄是否打开,都能正常调用里面的宏。代码如下:
Dim MyRunD
MyRunD = Application.Run("'" & ThisWorkbook.Path & "\MyRun1.xls'!MyTest1")
Debug.Print MyRunD
你可得记好了,此方法管用多了。上面的方法的缺点的,万一有宏的工作薄名称修改了,你又得修改代码了,要想解决工作薄名称发生改变仍然能正常调用宏,那么,你可以参考下面的代码。
Sub Main()
Call testRun("MyRun2") 'testRun("MyRun1")
End Sub
Sub testRun(ByRef strTest As String)
Application.Run strTest
End Sub
Sub MyRun1()
MsgBox "dzwebs"
End Sub
Sub MyRun2()
MsgBox "dz37w"
End Sub