1

首先让我解释一下为什么我要问这个问题,很明显我需要的不仅仅是Application.run命令。如果有人有办法通过其他方式解决问题,那也很好。

我创建了一个程序,该程序将使用宏和代码创建一个新的 excel 文件,该文件本身就是一个新程序。我这样做是因为我不想更改原始文件。原始文件是所有新创建文件的模板。

但是,当我运行我的代码时,我会遇到很多错误,其中的工作表名称不在原始文件中,但在新文件中。所以,在某种程度上发生了Activeworkbook变化,我不知道为什么。当我运行代码时,我将其更改Activeworkbook为新文件。

我希望通过从新文件运行宏并确保这些宏仅适用于新创建的工作簿而不适用于原始工作簿来解决此问题。问题是原始工作簿和新工作簿中的宏是相同的,我复制了模块。

所以我的问题是:有没有一种方法可以在 VBA-Excel 中运行另一个工作簿中具有相同名称的宏。重要的是,这个宏只能从它自己的工作簿中访问宏!

提前致谢

4

1 回答 1

1

我相信以下内容展示了您需要做的事情。

我创建了两个工作簿:“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()。

于 2012-04-13T21:43:05.880 回答