繁体   English   中英

创建函数-Excel VBA

[英]Creating a Function - Excel VBA

我有一些代码可以发出HTTP请求,并在解析之前从API提取XML。

我的代码的HTTP请求部分始终是相同的,唯一更改的参数是我将请求发送到的URL。 我想知道是否可以将请求转换为功能吗?

Set xmldoc = CreateObject("Msxml.DOMDocument")
Set httpReq = CreateObject("WinHttp.WinHttprequest.5.1")
xmldoc.async = False

httpReq.Open "GET", myUrl, False

httpReq.setRequestHeader "Content-Type", "text/xml"
    If Sheet2.proxyStatus = "ON" Then
    httpReq.setProxy 2, Sheet2.proxyServer, ""
    ElseIf Sheet2.proxyStatus = "OFF" Then
    httpReq.setProxy 0, "", ""
    End If
httpReq.setTimeouts -1, -1, -1, -1
httpReq.send request

xmldoc.LoadXML httpReq.responseText

Set xmlElement = xmldoc.DocumentElement

发出请求后,我使用类似以下的代码来解析XML中的数据:

TotalSessions = xmlElement.SelectSingleNode("//Row[@rowKey='Sessions']/Value[@columnId='SESSIONS']").Text

解析信息的代码不能包含在函数中,因为它正在寻找的节点和它所分配的变量是唯一且众多的,但显然它必须能够读取Function下载的XML。

我曾尝试创建函数,但是不确定将其定义为哪种类型,所以我选择了对象:

Function fetchXML(url As String) As Object

Set xmldoc = CreateObject("Msxml.DOMDocument")
Set httpReq = CreateObject("WinHttp.WinHttprequest.5.1")
xmldoc.async = False

httpReq.Open "GET", url, False

httpReq.setRequestHeader "Content-Type", "text/xml"
    If Sheet2.proxyStatus = "ON" Then
    httpReq.setProxy 2, Sheet2.proxyServer, ""
    ElseIf Sheet2.proxyStatus = "OFF" Then
    httpReq.setProxy 0, "", ""
    End If
httpReq.setTimeouts -1, -1, -1, -1
httpReq.send request

xmldoc.LoadXML httpReq.responseText

Set xmlElement = xmldoc.DocumentElement

End Function

然后,我尝试调用函数并解析一些信息:

fetchXML (coukChannels30DayUrl)

coukPPCSessionsSS = xmlElement.SelectSingleNode("//Row[@rowKey='1#11588418521354:1158842490346']/Value[@columnId='SESSIONS']").Text

但是不幸的是,它没有用,我把这个函数叫错了吗? 是错误的类型吗? 我什至可以这样做吗? 大声笑

干杯

好的,我可以使用它,我只需要在函数中更改此行:

Set xmlElement = xmldoc.DocumentElement

对此:

Set fetchXML = xmldoc.DocumentElement

然后在子目录中更改此行:

fetchXML (coukChannels30DayUrl)

对此:

Set xmlElement = fetchXML(coukChannels30DayUrl)

而且它的功能非常好,是的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM