Juste un petite remarque concernant la sécurité: Si l'URL provient de la saisie de l'utilisateur assurez-vous de respecter strictement valider cette entrée comme ShellExecute à l'exécution de toute commande avec les autorisations de l'utilisateur, qui est aussi un format c: serait exécuté si l'utilisateur est un administrateur.
Juste une note pour toute personne qui pourrait l'utiliser dans l'avenir: Vous avez à mettre la fonction ShellExecute en haut de la page, dans la section déclarations.
Certains peuvent avoir besoin d'ajouter "PtrSafe" dans l'instruction declare: "Privé de Déclarer PtrSafe Fonction ShellExecute..." pour le faire fonctionner en 64 bits.
- donc beaucoup plus simple: ThisWorkbook.FollowHyperlink("http://www.yoursite.com")
Notez que ThisWorkbook ne fonctionne que dans Excel
correct. Vous voulez envoyer, par exemple, application.followhyperlink dans l'Accès ou le Projet, activedocument.followhyperlink dans Word, activepresentation.folllowhyperlink dans PowerPoint, etc... Ne vous méprenez pas, il n'y a rien de mal avec votre méthode; les deux sont de bons choix pour des situations différentes. Je serais plus susceptibles d'utiliser FollowHyperlink pour une ou des situations où j'ai besoin de plus de contrôle sur le post/get/etc, et ShellExecute pour les groupes de pages pour être ouverts simultanément.
J'ai essayé ci-dessus dans le Mac et ne fonctionne pas. J'ai eu un "fichier non trouvé" erreur. Je suppose que c'est pour le shell32.dll. Aucune idée de comment la faire fonctionner à la fois sur Mac et Windows? Merci.
ThisWorkbook.FollowHyperlink("http://www.yoursite.com") travaillé pour plus d'.
Si dans Excel, vous avez besoin d'un classeur, comme ThisWorkbook.FollowHyperlink "www.google.com"
J'ai été reçu de l'Automatisation d'Erreur. J'ai donc besoin d'utiliser http://. Ensuite, l'intégralité de la commande est: ThisWorkbook.FollowHyperlink "http://www.google.com.br"
Dans Word, il est ActiveDocument.FollowHyperlink "google.com"
C'est plus simple si vous accédez à une page web de confiance, mais si vous voulez ouvrir une présentation powerpoint ou un document pdf dans un navigateur web, vous devez utiliser le ShellExecute par Dirk Vollmar pour éviter un message d'erreur à chaque fois que vous l'exécutez.
FollowHyperlink est de jouer avec IE/de sécurité de Pointe, La solution à l'aide de ShellExecute est plus fiable que ce que j'ai vécu
Un problème avec FollowHyperlink est qu'il est tentant d'interpréter l'url. Si l'Url renvoie 404 du code VBA échoue.
Comment fermer la fenêtre du navigateur ouverte par FollowHyperlink?
bien que cette solution fonctionne.. la solution retenue avant cela ouvre le navigateur avec une réponse rapide. cette solution est un peu plus lent pour ouvrir le navigateur.
re: @ihightower commentaire: Ce FollowHyperlink méthode retourne le contrôle à VBA plus vite que ShellExecute, mais ShellExecute ouvre les pages sllightly le plus rapide dans l'ensemble, et nécessite une API. Aussi, le Workbook.FollowHyperlink Méthode a plus de web-options spécifiques.
ShellExecute peut être beaucoup plus rapide pour les connexions https, comme il semble à la réutilisation des informations d'identification, tandis que FollowHyperlink peut déclencher reauthorisation processus.
Si vous voulez une solution plus robuste avec ShellExecute qui permettra d'ouvrir n'IMPORTE quel fichier, dossier ou l'URL à l'aide de l'OS par défaut, le programme associé à le faire, voici une fonction de prise de http://access.mvps.org/access/api/api0018.htm:
'************ Code Start **********' This code was originally written by Dev Ashish.' It is not to be altered or distributed,' except as part of an application.' You are free to use it in any application,' provided the copyright notice is left unchanged.'' Code Courtesy of' Dev Ashish'PrivateDeclareFunction apiShellExecute Lib"shell32.dll" _
Alias"ShellExecuteA" _
(ByVal hwnd AsLong, _
ByVal lpOperation AsString, _
ByVal lpFile AsString, _
ByVal lpParameters AsString, _
ByVal lpDirectory AsString, _
ByVal nShowCmd AsLong) _
AsLong'***App Window Constants***PublicConst WIN_NORMAL =1'Open NormalPublicConst WIN_MAX =3'Open MaximizedPublicConst WIN_MIN =2'Open Minimized'***Error Codes***PrivateConst ERROR_SUCCESS =32&PrivateConst ERROR_NO_ASSOC =31&PrivateConst ERROR_OUT_OF_MEM =0&PrivateConst ERROR_FILE_NOT_FOUND =2&PrivateConst ERROR_PATH_NOT_FOUND =3&PrivateConst ERROR_BAD_FORMAT =11&'***************Usage Examples***********************'Open a folder: ?fHandleFile("C:\TEMP\",WIN_NORMAL)'Call Email app: ?fHandleFile("mailto:[email protected]",WIN_NORMAL)'Open URL: ?fHandleFile("http://home.att.net/~dashish", WIN_NORMAL)'Handle Unknown extensions (call Open With Dialog):' ?fHandleFile("C:\TEMP\TestThis",Win_Normal)'Start Access instance:' ?fHandleFile("I:\mdbs\CodeNStuff.mdb", Win_NORMAL)'****************************************************Function fHandleFile(stFile AsString, lShowHow AsLong)Dim lRet AsLong, varTaskID AsVariantDim stRet AsString'First try ShellExecute
lRet = apiShellExecute(hWndAccessApp, vbNullString, _
stFile, vbNullString, vbNullString, lShowHow)If lRet > ERROR_SUCCESS Then
stRet = vbNullString
lRet =-1ElseSelectCase lRet
Case ERROR_NO_ASSOC:'Try the OpenWith dialog
varTaskID = Shell("rundll32.exe shell32.dll,OpenAs_RunDLL " _
& stFile, WIN_NORMAL)
lRet =(varTaskID <>0)Case ERROR_OUT_OF_MEM:
stRet ="Error: Out of Memory/Resources. Couldn't Execute!"Case ERROR_FILE_NOT_FOUND:
stRet ="Error: File not found. Couldn't Execute!"Case ERROR_PATH_NOT_FOUND:
stRet ="Error: Path not found. Couldn't Execute!"Case ERROR_BAD_FORMAT:
stRet ="Error: Bad File Format. Couldn't Execute!"CaseElse:EndSelectEndIf
fHandleFile = lRet & _
IIf(stRet ="", vbNullString,", "& stRet)EndFunction'************ Code End **********
Il suffit de mettre ceci dans un module séparé et appels fHandleFile() avec les bons paramètres.
Vous pouvez utiliser la fonction Windows API
ShellExecute
de le faire:Juste un petite remarque concernant la sécurité: Si l'URL provient de la saisie de l'utilisateur assurez-vous de respecter strictement valider cette entrée comme
ShellExecute
à l'exécution de toute commande avec les autorisations de l'utilisateur, qui est aussi unformat c:
serait exécuté si l'utilisateur est un administrateur.ThisWorkbook.FollowHyperlink("http://www.yoursite.com")
ThisWorkbook
ne fonctionne que dans Excelapplication.followhyperlink
dans l'Accès ou le Projet,activedocument.followhyperlink
dans Word,activepresentation.folllowhyperlink
dans PowerPoint, etc... Ne vous méprenez pas, il n'y a rien de mal avec votre méthode; les deux sont de bons choix pour des situations différentes. Je serais plus susceptibles d'utiliserFollowHyperlink
pour une ou des situations où j'ai besoin de plus de contrôle sur le post/get/etc, etShellExecute
pour les groupes de pages pour être ouverts simultanément.ThisWorkbook.FollowHyperlink("http://www.yoursite.com")
travaillé pour plus d'.Vous pouvez même dire:
Si vous obtenez l'Erreur Automation ensuite utiliser
http://
:http://
. Ensuite, l'intégralité de la commande est:ThisWorkbook.FollowHyperlink "http://www.google.com.br"
FollowHyperlink
méthode retourne le contrôle à VBA plus vite queShellExecute
, maisShellExecute
ouvre les pages sllightly le plus rapide dans l'ensemble, et nécessite une API. Aussi, leWorkbook.FollowHyperlink
Méthode a plus de web-options spécifiques.Si vous voulez une solution plus robuste avec ShellExecute qui permettra d'ouvrir n'IMPORTE quel fichier, dossier ou l'URL à l'aide de l'OS par défaut, le programme associé à le faire, voici une fonction de prise de http://access.mvps.org/access/api/api0018.htm:
Il suffit de mettre ceci dans un module séparé et appels fHandleFile() avec les bons paramètres.
Vous devez appeler
ShellExecute
.