2010-08-02 50 views
0

我需要幫助來合併2個宏。基本上,在「MACRO1」在文件1(位於文件1中的宏1本身)中運行完畢後,我希望excel運行文件2中的「MACRO 2」(位於文件2中的宏2本身)。我試着用下面的代碼:我需要幫助來合併2個宏

Windows("2.xls").Activate 
Application.Run "2.xls!Macro2" 

然而,而不是在文件2中運行,它運行在文件1,它覆蓋所有原始數據我在文件1.(這又回到了1.xls連我激活)

我的目標: 在excel完成宏1中文件1的所有更新後,我想讓宏2執行我放入宏1中的命令文件2.我能做些什麼來告訴excel運行在不同的文件中,而不是我編寫代碼的那個文件?我需要一個VBA代碼,可以幫助我實現這一點。誰能幫忙?

謝謝。

+0

從[有](HTTP ://en.kioskea.net/forum/affich-98864-how-to-specify-macro-for-current-active-sheet)在表達式中添加ActiveSheet的想法... – pascal 2010-08-02 02:57:53

回答

0

我可能會錯過一些東西,但我扔了一個樣本(使用Office 2007),它似乎爲我工作。下面是我所做的:

在1.xlsm我有以下兩個宏:

Sub Macro1() 

    Sheet1.Range("A1").Value = "This is Workbook 1" 

End Sub 

Sub RunOverwrite() 

    Call Application.Run("Macro1") 
    Call Application.Run("2.xlsm!Macro2") 

End Sub 

我有一個第二個工作簿下面的宏,稱爲2.xlsm:

Sub Macro2() 

    Sheet1.Range("A1").Value = "This is Workbook 2" 

End Sub 

當我執行第一個工作簿中的RunOverwrite子,它首先在第一個工作簿(「1.xlsm」)的單元格A1中寫入「This is Workbook 1」,然後在第二個工作簿的單元格A1中寫入「This is Workbook 2」 ( 「2.xlsm」)。

我是否錯過了您的原始查詢內容?

0

您可以嘗試重寫您的宏以將工作簿的名稱作爲參數。然後你只需要用它想要運行的工作簿調用它兩次。

當你調用它,它會是這個樣子:

Macro2("C:\Desktop\Workbook1.xls") 
Macro2("C:\Desktop\Workbook2.xls") 

爲了這個工作,你的宏將是這個樣子:

Sub Macro1(TargetBook as Workbook) 
    ' Code goes here 
End Sub