2010-05-10 4 views
7

J'ai une macro qui se trouve sur un serveur. Je dois pouvoir l'exécuter depuis différents postes de travail qui se connectent à ce serveur.Exécution d'une macro Excel à partir d'un autre classeur

Actuellement, je suis en train de faire:

Application.Run ("L:\database\lcmsmacro\macro1.xlsm!macro_name") 

Le message d'erreur que je reçois est « La macro peut ne pas être disponible dans ce classeur # 1004 »

je l'ai déjà fait en sorte que mes paramètres de sécurité sont régler au niveau le plus bas. Comment exécuter une macro à partir d'un autre classeur hébergé sur un serveur différent?

utiliser des compléments m'aider?

Répondre

17

Je pense que votre syntaxe manque les guillemets simples:

Application.Run ("'L:\database\lcmsmacro\macro1.xlsm'!macro_name") 

Ensuite, si vous avez besoin de passer des paramètres à elle la syntaxe serait comme ceci:

Application.Run ("'L:\database\lcmsmacro\macro1.xlsm'!macro_name","param1","param2") 
+1

pourquoi Ai-je besoin de guillemets simples? –

+5

C'est la syntaxe standard pour lier tous les classeurs pour Excel qui sont fermés. Par exemple si vous liez une cellule à une autre cellule dans un classeur fermé différent, la syntaxe ressemblerait à ceci: 'C: \ Documents and Settings \ mnbtjf01 \ Desktop \ [monWorkbook.xls] Sheet1'! $ F $ 15 Vous pouvez également aller plus loin, si vous avez besoin de plus de contrôle sur la feuille de calcul en réseau. Voici une bonne ressource: http://www.vbaexpress.com/kb/getarticle.php?kb_id=279 – Fink

+0

S'il y a des variables pour SheetName alors, nous pouvons utiliser - Application.Run "'" & ExcelSheetName & "' ! MacroName " – OverrockSTAR

1

Cette erreur aussi montre lorsque des noms de macro sont dupliqués dans le classeur distant, par exemple deux macros nommées "macro_name". Ça m'a pris un moment pour le savoir!

0

Généralement dans les noms un seul est requis si vous avez un espace ou une ponctuation dans un nom afin qu'Excel ne soit pas confus en pensant que l'espace est une séparation délibérée, comme dans la séparation des arguments d'une méthode. Dans certains cas, Excel insistera sur eux. Habituellement, il n'est pas dangereux de les inclure, même s'ils ne sont pas nécessaires, par exemple quand aucun espace n'est présent dans les noms. Parfois, Excel les retirera s'ils ne sont pas nécessaires. http://www.eileenslounge.com/viewtopic.php?f=27&t=25599

0

Si la macro vous devez trouver chemin macro relatif en utilisant le chemin de classeur à partir duquel vous exécutez macro et vous devez exécuter plusieurs macros dans la liste de tableau, le code ci-dessous vous aidera:

Dim relativePath As String, programFileName As String 
Dim selectedProgramsFiles() As String, programsArrayLastIndex As Byte, I As Byte 

For I = 0 To programsArrayLastIndex 'Loop through all selected programs 
    programFileName = selectedProgramsFiles(I) 
    relativePath = ThisWorkbook.Path & "\" & programFileName 
    Workbooks.Open Filename:=relativePath 

    Application.Run ("'" & relativePath & "'!ModuleName.Main") 

    Workbooks(programFileName).Activate 
    ActiveWorkbook.Close SaveChanges:=False 
Next I 'For I = 0 To programsArrayLastIndex 'Loop through all selected program 
Questions connexes