首先让我解释一下为什么我问这个问题,所以很明显我需要的不仅仅是Application.run
命令。如果有人有办法通过其他方式解决问题,那也很好。
我创建了一个程序,该程序将使用宏和代码制作一个新的 excel 文件,该文件本身就是一个新程序。我这样做是因为我不希望更改原始文件。原始文件是所有新创建文件的模板。
但是当我运行代码时,我收到很多错误,工作表名称不在原始文件中,而是在新文件中。所以,在某种程度上,Activeworkbook
发生了变化,我不知道为什么。当我运行代码时,我将Activeworkbook
更改为新文件。
我希望通过从新文件运行宏并确保这些宏仅适用于新创建的工作簿而不是原始工作簿来解决此问题。问题是原始工作簿和新工作簿中的宏是相同的,我复制了模块。
所以我的问题:有没有办法在 VBA-Excel 中运行另一个工作簿中具有相同名称的宏。重要的是,此宏将仅从其自己的工作簿访问宏!
提前致谢
以下内容演示了您需要做什么。
我创建了两个工作簿:"TryDup1.xls"和"TryDup2.xls"。
"TryDup1.xls"在模块中包含以下代码:
Option Explicit
Sub CtrlDup()
Dim PathCrnt As String
Dim WBookOrig As Workbook
Dim WBookOther As Workbook
Call DupMac(1)
Set WBookOrig = ActiveWorkbook
PathCrnt = ActiveWorkbook.Path & ""
Set WBookOther = Workbooks.Open(PathCrnt & "TryDup2.xls")
Call Application.Run("TryDup1.xls!DupMac", 2)
Call Application.Run("TryDup2.xls!DupMac", 3)
WBookOther.Close SaveChanges:=False
Call DupMac(4)
End Sub
Sub DupMac(Param As Long)
Debug.Print "TryDup1's DupMac: Param=" & Param
End Sub
"TryDup2.xls"在模块中包含以下代码:
Option Explicit
Sub DupMac(Param As Long)
Debug.Print "TryDup2's DupMac: Param=" & Param
End Sub
打开"TryDup1.xls"并执行 CtrlDup() 会导致将以下内容输出到"即时"窗口:
TryDup1's DupMac: Param=1
TryDup1's DupMac: Param=2
TryDup2's DupMac: Param=3
TryDup1's DupMac: Param=4
所以宏 CtrlDup() 可以运行宏 DupMac() 的任一版本。