VBA: Comment faire pour exécuter une autre application à partir de MS Access
J'ai essayé d'obtenir ce problème trouvé, et il semble que je ne peux pas trouver la solution au problème n'importe où. Voici la première partie: VBA commande Shell retourne toujours "Fichier Non Trouvé" Dans cette question, il n'était pas de trouver l'application dans le dossier %APPDATA% pour une raison étrange, probablement un paramètre de sécurité.
J'ai déménagé depuis l'outil d'importation dans le même répertoire que je stocke dans la base de données, avec un petit espoir de la faire fonctionner correctement.
Mon objectif est de cliquer sur un bouton dans MS Access et l'exécuter mon outil d'importation directement. Maintenant, je l'ai, ouvrez le dossier qui contient l'outil. Cela fonctionne sur ma machine de développement qui a des privilèges d'administrateur, mais ne fonctionne pas sur d'autres machines sans admin privs. Le code de droit maintenant ressemble à quelque chose comme:
Dim hProcess as Long
Dim myPath as String
Dim ex as String
ex = "C:\WINDOWS\explorer.exe "
myPath = Environ("ProgramFiles(x86)") & "\mytool\"
hProcess = Shell(ex & myPath, vbNormalFocus)
Cela permet au dossier qui contient le fichier à ouvrir, mais seulement sur les comptes d'ordinateur qui ont des privilèges d'administrateur complet. Lors de l'exécution de cette opération sur un compte de machine qui a moins de privilèges, il n'a tout simplement rien.
J'ai aussi essayé le suivant:
Dim hProcess As Long
Dim myPath as String
myPath = Environ("ProgramFiles(x86)") & "\mytool\mytool.exe"
hProcess = Shell(myPath, vbNormalFocus)
Cette section "semble" travailler qu'il charge de l'application "mytool.exe" quand je regarde le gestionnaire de processus. Cependant, après quelques secondes (peut-être 20), une boîte de dialogue apparaît, indiquant que l'application "mytool.exe" a cessé de fonctionner.
Une chose à noter ici est que j'ai des privilèges d'administrateur sur ma machine de développement, mais j'ai tous les privilèges sur mon ordinateur à la maison. Sur mon ordinateur à la maison, ce deuxième code fonctionne sans problème que ce soit. Sur ma machine de développement, il se bloque, alors que l'autorisation de l'utilisateur de la machine, il ne fait rien du tout.
Des suggestions sur la façon d'ouvrir cette application à partir de MS Access en utilisant moins que des privilèges d'administrateur? Soit pour exécuter l'application directement ou, du moins, ouvrez le dossier dans lequel ladite demande de résidence.
Merci!
P. S. j'ai essayé les deux ShellAndWait et RunApplication code trouvé sur stackoverflow, ni de ce qui fonctionne dans ce cas.
OriginalL'auteur Jim P | 2012-05-17
Vous devez vous connecter pour publier un commentaire.
J'ai toujours utiliser
ShellExecute
de l'API de Windows quand j'en ai besoin pour exécuter quelque chose en VBA.Autant que je sache, il travaille sur des machines sans privilèges.
Exemple:
Maintenant, vous pouvez appeler
ShellEx
à exécuter à peu près tout:Noter que
ShellEx
deux paramètres facultatifs.Je n'ai pas montré dans les exemples ci-dessus, mais vous pouvez:
OriginalL'auteur Christian Specht
suivez ce lien
MS ACCESS: LANCER UNE APPLICATION À PARTIR D'ACCESS 2003/XP/2000/97
voici un exemple d'exécution d'une application dans ms access
je souhaite qu'il vous aide à
OriginalL'auteur ajokar
Juste jouer avec http://www.mombu.com/microsoft/scripting-wsh/t-vista-uac-problem-with-wscriptshell-run-method-1508617.html. J'ai essayé cela sur Windows 7 PC à la maison.
Il pourrait vous donner quelques idées.
Je l'ai essayé en VBA, mais je n'ai aucune idée si cela va fonctionner dans votre situation. Tout ce que je peux dire, c'est qu'il a couru en VBA sur mon PC à la maison.
J'obtiens une erreur de "Méthode ou Datamember pas trouvé" sur le objShell.Espace de noms() la méthode. En outre, je ne sais pas quoi dimension objFolder et objFolderItem comme. Actuellement, ils sont dimensionnés en tant que Variante.
Je ne peux pas reproduire le problème, mais je vais regarder un peu plus longtemps. Surtout vous pouvez dimension de choses à commencer par obj as Object. Cependant, comme c'est un test, vous pouvez passer le dimensionnement pour l'instant.
Pouvez-vous définir une référence à
Microsoft Shell Controls and Automation
(Shell32) par msdn.microsoft.com/en-us/library/windows/desktop/...? Vous pouvez alorsDim objshell As Shell
et de voir si l'espace de Noms est disponible dans intellisense. Vous pouvez aussi vérifier si l'utilisation deobjShell.Namespace("c:\some\folder")
œuvres.OriginalL'auteur Fionnuala
Vérifier
avec un autre exécutable. Il peut y avoir un problème avec votre outil.
OriginalL'auteur MaxD