VBA fonction Shell dans Office 2011 pour Mac
Je suis en train de lancer un script shell à partir d'une macro VBA dans Word 2011 pour Mac qui va s'exécuter dans une fenêtre de Terminal. J'ai essayé d'utiliser à la fois la fonction Shell et le MacScript
fonction, mais le VBA interprète ne semble pas être en mesure de trouver le script dans les deux cas.
Selon le VBA documentation de référence, la suivante devrait fonctionner:
RetVal = Shell("Macintosh HD:Applications:Calculator.app", vbNormalFocus)
Cela produit une erreur d'exécution 53 "Fichier non trouvé".
Des suggestions?
Est l'application calculatrice présent à cet emplacement?
OriginalL'auteur Francis Cave | 2011-05-26
Vous devez vous connecter pour publier un commentaire.
La
Shell()
fonction VBA sur Mac semble exiger le chemin d'accès complet comme HFS-chemin d'accès de style (avec des virgules à la place des barres obliques). Il ne semble pas accepter les arguments que sur Windows (déclaration d'un "Chemin d'accès introuvable" erreur si tous les arguments sont ajoutés).La
MacScript()
VBA fonction peut également être utilisée:MacScript("do shell script ""command""")
. C'est probablement l'option la plus simple et ce que je vous suggère de faire. L'inconvénient est qu'il a beaucoup de frais généraux (100-200ms par appel).Une autre alternative est le
system()
fonction de la bibliothèque standard C:Voir http://pubs.opengroup.org/onlinepubs/009604499/functions/system.html pour la documentation.
system()
seulement renvoie le code de sortie. Si vous voulez obtenir à la sortie de la commande, vous pouvez utiliserpopen()
.Noter que plusieurs de la
Long
arguments dans l'exemple ci-dessus sont des pointeurs, devront donc être modifié si une version 64 bits de Mac Word est jamais sorti.Another alternative is the system() function from the standard C library:
Fantastique répondre
"Notez que plusieurs de Long arguments dans l'exemple ci-dessus sont des pointeurs, devront donc être modifié si une version 64 bits de Mac Word est jamais sorti." Qui est réellement arrivé! Maintenant, je fais quoi?
Voir github.com/VBA-tools/VBA-Web/issues/248 pour une résolution de 64 bits.
Parfait~! Veuillez ne pas oublier d'ajouter "PtrSafe" en face de "Fonction" pour une version plus récente d'Excel, par exemple comme "Privé Déclarer système de Fonction de Lib...".
OriginalL'auteur Robert Knight
Nous espérons que vous avez trouvé la réponse maintenant, mais vous avez juste besoin le chemin d'accès complet:
RetVal = Shell("Macintosh HD:Applications:Calculator.app:" & _
"Contents:MacOS:Calculator", vbNormalFocus)
Un autre exemple est quelque chose comme:
RetVal = Shell("Macintosh HD:Users:brownj:Documents:" & _
"rnaseq:IGV_2.0.14:igv.sh", vbNormalFocus)
OriginalL'auteur brwnj
Un autre problème se présente exactement comme ceci: autorisations cause de votre script à l'échec en raison des différences entre les AppleScript de l'environnement et de l'utilisateur de votre environnement bash. Cette Q&A m'a aidé à comprendre cela. Pour obtenir mon script fonctionne, j'ai eu à résoudre certains de chemin d'accès et les autorisations de problèmes (et non pas le script lui-même, mais les choses touché par le script).
Voici ma recommandation, qui nous l'espérons donne un meilleur aperçu lors de votre dépannage que le sens Excel erreurs, j'ai été voir avant, j'ai utilisé l'Éditeur AppleScript:
Utiliser l'Éditeur AppleScript pour confirmer que le script fonctionne réellement que n'importe quel utilisateur et avec quelle que soit la variable d'environnement se trouve à être utilisé:
Type de votre script simple dans le nouveau fichier sans doubler les doubles quotes - mine lit
maintenant de copier votre simple script à partir de l'Éditeur AppleScript pour votre vba et confirmer qu'il fonctionne toujours
J'ai pu simplement le double de mon guillemets et le mettre dans des guillemets après le MacScript code:
C'est en effet un, deux, puis trois, les guillemets doubles! (sans doute échapper les guillemets)
OriginalL'auteur sage
Tout simplement pas assez de points pour faire un commentaire, mais ressentir cela comme un ajout à Robin des Chevaliers de réponse. Crédits de cours encore à lui et pour lui.
Pour Excel 15.18 (2015) l'appel d'offres ouvert utilisé dans la fonction system() de la bibliothèque standard C n'a pas besoin de l' --args mot-clé plus:
cela fonctionne bien. Ne l'ai pas test sous 2011.
OriginalL'auteur Lord iPhonius