2010-07-02 208 views

回答

30

您可以使用Windows API函數ShellExecute這樣做:

Option Explicit 

Private Declare Function ShellExecute _ 
    Lib "shell32.dll" Alias "ShellExecuteA" (_ 
    ByVal hWnd As Long, _ 
    ByVal Operation As String, _ 
    ByVal Filename As String, _ 
    Optional ByVal Parameters As String, _ 
    Optional ByVal Directory As String, _ 
    Optional ByVal WindowStyle As Long = vbMinimizedFocus _ 
) As Long 

Public Sub OpenUrl() 

    Dim lSuccess As Long 
    lSuccess = ShellExecute(0, "Open", "www.google.com") 

End Sub 

僅有短短的一句話就安全性:如果URL來自用戶的輸入,確保嚴格驗證輸入作爲ShellExecute會執行任何命令在用戶的權限下,如果用戶是管理員,則還會執行format c:

+6

只是爲將來任何人使用這個註釋:您必須將ShellExecute函數放在頁面頂部的聲明部分。 – dmr 2010-07-02 14:42:14

+3

某些可能需要在聲明語句中添加「PtrSafe」:「Private Declare PtrSafe Function ShellExecute ...」,以使其在64位中工作。 – Jroonk 2015-10-30 01:25:28

22

,你甚至可以說:

FollowHyperlink "www.google.com" 

如果你得到自動化錯誤然後使用http://

ThisWorkbook.FollowHyperlink("http://www.google.com") 
+7

如果在Excel中,您需要工作簿對象,例如ThisWorkbook.FollowHyperlink「www.google.com」 – 2012-06-14 19:59:33

+0

我收到自動化錯誤。所以我需要使用'http://'。然後,完整的命令是:'ThisWorkbook.FollowHyperlink「http://www.google.com.br」' – 2015-01-08 19:04:23

+0

在Word中它是ActiveDocument.FollowHyperlink「http://www.google.com」 – 2015-08-24 04:20:15

5

如果你想與ShellExecute的一個更強大的解決方案,這將打開任何文件,文件夾或網址使用默認的OS關聯程序來這樣做,這裏是取自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 
' 
Private Declare Function apiShellExecute 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 nShowCmd As Long) _ 
    As Long 

'***App Window Constants*** 
Public Const WIN_NORMAL = 1   'Open Normal 
Public Const WIN_MAX = 3   'Open Maximized 
Public Const WIN_MIN = 2   'Open Minimized 

'***Error Codes*** 
Private Const ERROR_SUCCESS = 32& 
Private Const ERROR_NO_ASSOC = 31& 
Private Const ERROR_OUT_OF_MEM = 0& 
Private Const ERROR_FILE_NOT_FOUND = 2& 
Private Const ERROR_PATH_NOT_FOUND = 3& 
Private Const 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 As String, lShowHow As Long) 
Dim lRet As Long, varTaskID As Variant 
Dim stRet As String 
    'First try ShellExecute 
    lRet = apiShellExecute(hWndAccessApp, vbNullString, _ 
      stFile, vbNullString, vbNullString, lShowHow) 

    If lRet > ERROR_SUCCESS Then 
     stRet = vbNullString 
     lRet = -1 
    Else 
     Select Case 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!" 
      Case Else: 
     End Select 
    End If 
    fHandleFile = lRet & _ 
       IIf(stRet = "", vbNullString, ", " & stRet) 
End Function 
'************ Code End ********** 

只需將其放入一個單獨的模塊中,並使用正確的參數調用fHandleFile()。

相關問題