2012-04-13 93 views
1

首先让我解释为什么我问这个问题,以便清楚地知道我需要的不仅仅是Application.run命令。如果有人有办法通过其他方式解决问题,那也是一件好事。从另一个工作簿运行一个相同的宏

我创建了一个程序,它将创建一个新的excel文件,其中包含宏和代码,它是一个新程序。我这样做是因为我不想让原始文件改变。原始文件是所有新建文件的模板。

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

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

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

在此先感谢

+0

Jort,请分享您使用的代码。 – 2012-04-13 13:44:51

回答

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” 包含一个模块在下面的代码:

开放 “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()。

相关问题