2010-08-02 4 views
0

je besoin d'aide pour fusionner 2 macros. Basiquement, après que "MACRO1" se soit terminé dans le fichier 1 (la macro 1 elle-même se trouve dans le fichier 1), je veux que Excel exécute "MACRO 2" dans le fichier 2 (la macro 2 se trouve dans le fichier 2). J'ai essayé en utilisant le code suivant:besoin d'aide pour fusionner 2 macros

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

Cependant, au lieu de courir dans le fichier 2, il fonctionne dans le fichier 1 qui remplace toutes les données d'origine je devais dans le fichier 1. (Il remonte à 1.xls même i a donné le code Windows ("2.xls"). Activer)

Après avoir terminé toutes les mises à jour du fichier 1 par la macro 1, je voudrais que la macro fichier 2. Que puis-je faire pour dire à Excel d'exécuter dans le fichier différent au lieu du fichier sur lequel j'ai écrit les codes? J'ai besoin d'un code VBA qui peut m'aider à achiece cela. Quelqu'un peut-il aider ??

Merci.

+0

De [il] (http : //en.kioskea.net/forum/affich-98864-how-to-specify-macro-for-current-active-sheet) l'idée d'ajouter ActiveSheet dans les expressions ... – pascal

Répondre

0

je pourrais manquer quelque chose, mais je jeté ensemble un échantillon (en utilisant Office 2007) et il semble fonctionner pour moi. Voici ce que je l'ai fait:

Dans 1.xlsm je les deux macros suivantes:

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 

je la macro suivante dans un deuxième classeur, appelé 2.xlsm:

Sub Macro2() 

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

End Sub 

Lorsque J'exécute le sous-programme RunOverwrite dans le premier classeur, il écrit d'abord "This is Workbook 1" dans la cellule A1 du premier classeur ("1.xlsm"), puis écrit "This is Workbook 2" dans la cellule A1 du second classeur ("2.xlsm").

Suis-je manque quelque chose de votre enquête initiale?

0

Vous pouvez essayer de réécrire votre macro pour prendre au nom d'un classeur comme argument. Ensuite, vous l'appelez deux fois avec les classeurs sur lesquels vous voulez l'exécuter.

Lorsque vous appelez, il ressemblerait à quelque chose comme ceci:

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

Pour que cela fonctionne, votre macro ressemblerait à quelque chose comme ceci:

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