如何在VBA的默認瀏覽器中打開HTML頁面?我知道它是這樣的:用VBA在默認瀏覽器中打開一個html頁面?
Shell "http://myHtmlPage.com"
但我想我必須參考該程序將打開該頁面。
如何在VBA的默認瀏覽器中打開HTML頁面?我知道它是這樣的:用VBA在默認瀏覽器中打開一個html頁面?
Shell "http://myHtmlPage.com"
但我想我必須參考該程序將打開該頁面。
您可以使用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:
。
,你甚至可以說:
FollowHyperlink "www.google.com"
如果你得到自動化錯誤然後使用http://
:
ThisWorkbook.FollowHyperlink("http://www.google.com")
如果在Excel中,您需要工作簿對象,例如ThisWorkbook.FollowHyperlink「www.google.com」 – 2012-06-14 19:59:33
我收到自動化錯誤。所以我需要使用'http://'。然後,完整的命令是:'ThisWorkbook.FollowHyperlink「http://www.google.com.br」' – 2015-01-08 19:04:23
在Word中它是ActiveDocument.FollowHyperlink「http://www.google.com」 – 2015-08-24 04:20:15
如果你想與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()。
只是爲將來任何人使用這個註釋:您必須將ShellExecute函數放在頁面頂部的聲明部分。 – dmr 2010-07-02 14:42:14
某些可能需要在聲明語句中添加「PtrSafe」:「Private Declare PtrSafe Function ShellExecute ...」,以使其在64位中工作。 – Jroonk 2015-10-30 01:25:28