11

我正在搜索 Excel VBA 宏的查询,以获取网页的 HTML 源代码作为字符串。

我找到了一些来源,getHTTPrequest但我无法注册 .net 框架system.dll或链接它。

谢谢!

4

2 回答 2

9

足够接近:如何使用 VBA 从 Excel 向服务器发送 HTTP POST 请求?— 它甚至适用于 Excel ;-)

只需使用 GET 请求:

objHTTP.Open "GET", URL, False

MSDN:使用 WinHttpRequest COM 对象 - 使用 Visual Basic 检索数据

于 2009-05-03T18:01:17.983 回答
6

这是一个紧凑的函数,它返回几乎任何指定 URL 的响应文本,例如网页的 HTTP 源代码,或来自JSON API 的响应文本。


后期绑定:( 无需参考)

Public Function getHTTP(ByVal url As String) As String
  With CreateObject("MSXML2.ServerXMLHTTP.6.0") 
    .Open "GET", url, False: .Send
    getHTTP = StrConv(.responseBody, vbUnicode)
  End With
End Function

早期绑定:

如果您需要重复调​​用该函数(例如在循环中),最好将其用作早期绑定函数:

  1. 添加对 XML 库的引用:

    ToolsReferences→ 选择 Microsoft XML, v6.0 (或您列出的最高版本)

  2. 声明一个模块级变量:(将此行放在模块的顶部)
    (创建新 VBA 模块的快捷方式:Alt+ F11IM

    Dim msXML As XMLHTTP60

  3. 在函数中,仅当变量尚未设置时才创建 XML 对象:

     Public Function getHTTP(ByVal url As String) As String
       If msXML Is Nothing Then Set msXML = New XMLHTTP60
       With msXML
         .Open "GET", url, False: .Send
         getHTTP = StrConv(.responseBody, vbUnicode)
       End With
     End Function
    

示例用法:( 对于任何一种方法)

要获取此页面的 HTML 源代码:

Debug.Print getHTTP("https://stackoverflow.com/q/817602")

注意!

如果您尝试使用此类方法或其他方法(即 Excel 的方法)连接到不安全的 url,许多应用程序(包括MS OfficeWEBSERVICE )现在将返回错误。

为避免此问题,请尽可能使用HTTPS://代替。HTTP://

于 2018-10-20T07:34:51.657 回答