J'ai utilisé la fonction "Shell", dans d'autres bases de données Access, pour ouvrir des dossiers.
Avec la même structure de code, j'obtiens le
5 code d'erreur "Appel de procédure ou argument non valide"
En utilisant la fonction shell comme suit:
FreightFile_Path = "S:\Supply Chain\Freight" Shell "explorer.exe " & FreightFile_Path, vbNormalFocus
J'ai essayé les doubles guillemets et les Chr (34) autour d'eux.
J'ai copié le code d'une base de données (dans laquelle il fonctionnait) vers une autre et cela a généré une erreur.
Est-ce que je manque quelque chose que je dois activer dans MS Access? J'ai vérifié les références dans VBA et je me suis assuré qu'elles correspondent.
Ce que j'ai essayé:
Dim i As String i = "explorer.exe" & " " & FreightFile_Path Shell i, vbNormalFocus
Dim retVal retVal = Shell("explorer.exe" & " " & FreightFile_Path, vbNormalNoFocus)
Shell "explorer.exe" & " " & FreightFile_Path, vbNormalFocus
4 Réponses :
Essayez ceci:
FreightFile_Path = "S:\Supply Chain\Freight" Shell "cmd /c start explorer.exe """ & FreightFile_Path & """"
C'est un peu une solution de contournement, mais cela fonctionne ...
Merci pour la réponse, malheureusement pas de dés. J'ai toujours l'erreur 5 Ce qui est étrange, c'est que je colle cela dans une base de données différente et que cela fonctionne très bien, je me demande si j'ai juste un fichier d'accès corrompu ...
Nouvel essai. Utilisez un appel WinAPI
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, _ ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, _ ByVal lpDirectory As String, ByVal lpnShowCmd As Long) As Long Public Sub ShellEx(ByVal Path As String, Optional ByVal Parameters As String, Optional ByVal HideWindow As Boolean) If Dir(Path) > "" Then ShellExecute 0, "open", Path, Parameters, "", IIf(HideWindow, 0, 1) End If End Sub Sub Test() FreightFile_Path = "S:\Supply Chain\Freight" ShellEx "c:\windows\explorer.exe", """" & FreightFile_Path & """" End Sub
Merci à tous pour votre aide. Ce n'est peut-être pas vraiment une réponse au problème du Shell
, mais cela fonctionnera pour ouvrir un chemin de fichier.
Dim FreightFilePath As String FreightFilePath = "S:\Supply Chain\Freight" Application.FollowHyperLink FreightFilePath
J'ai juste eu le même problème. Dans mon cas, il s'est avéré que c'était un antivirus qui bloquait Shell
. Il se trouve que le service informatique a mis en place des exceptions pour mon ordinateur pour une base de données mais pas pour l'autre. Voir ma question et ma réponse pour plus de détails.
Voilà la réponse. Je vous remercie
@goldgerm Doux! C'est tellement étrange que nous ayons tous les deux eu le même problème étrange le même jour. Heureux que cela ait fonctionné :)
Tout à fait. Ça me rendait fou! Entre les 2 bases de données c'était littéralement LA. MÊME. CODE. et ne fonctionne toujours pas
C'est juste une chaîne vers un dossier. Je l'ai littéralement défini sur "S: \ Supply Chain \ Freight" à des fins de test. Je ne veux pas vraiment ouvrir un fichier spécifique comme un pdf ou un document Excel car il y en aura plusieurs dans ce dossier. J'ai également essayé d'utiliser le chemin d'accès complet du serveur et cela n'a pas fonctionné non plus
Le code dans l'extrait supérieur fonctionne parfaitement bien ici, ... étant donné un chemin valide, avec ou sans espaces. Le lecteur
S
est-il un lecteur réseau mappé? (devrait fonctionner correctement aussi) - Je ne peux pas reproduire l'erreur 5 que vous obtenez, même avec un chemin invalide (il ouvre "mes documents")FWIW la fonction
Shell
est définie dans le moduleVBA.Interaction
; il est dans la bibliothèque standard VBA, tout commeMsgBox
. Aucune «référence spéciale» n'est nécessaire.Je me rends compte que c'est très étrange. J'ai une autre base de données sur le même ordinateur que le même code exact fonctionne parfaitement bien. Je me demande simplement si je n'ai pas de paramètre activé ou quelque chose qui l'empêche de fonctionner
Question stupide: le projet se compile-t-il? Déboguer ~> Compiler VBAProject
Oui, tout est compilé. Voici une photo du code côte à côte. Si vous regardez simplement les zones en surbrillance qui sont en cours d'exécution (le reste des choses fonctionnerait si je ne testais pas). Mais cela fonctionne sur l'un et pas sur l'autre imgur.com/YUpVQAW Vu que le shell d'appel n'était pas commenté, mais quand même - a commenté cette ligne et le même résultat
Est-il possible que le symbole
Shell
ait été redéfini ailleurs dans la base de données?Pour ce que ça vaut, j'ai exactement le même problème:
Shell
fonctionne dans une base de données mais pas dans une autre. Mon test est aussi simple que possible:Shell "notepad.exe"
. La question est ici: stackoverflow.com/questions/56676948/...La seule instance de
Shell
est la seule fois que je l'utiliseOK, je suis curieux maintenant - si vous analysez le code avec Rubberduck , puis sélectionnez le
Shell
appel de fonction, la barre d'outils Rubberduck dit-elleVBE7.DLL; VBA.Interaction.Shell (fonction: Double)
ou autre chose?