Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba Can';t打印子系统中函数的结果_Vba_Web Scraping - Fatal编程技术网

Vba Can';t打印子系统中函数的结果

Vba Can';t打印子系统中函数的结果,vba,web-scraping,Vba,Web Scraping,我创建了一个宏来从一个免费的代理站点中刮取代理。宏能够生成代理列表。但是,我的目的是从函数GenerateProxy打印此子例程PrintProxies中的代理列表。我不明白如何从该函数返回最终可以在子例程中打印的结果集合 我试过: Function GenerateProxy() As Variant Dim oHttp As New ServerXMLHTTP60, Html As New HTMLDocument Dim iCol As New Collection, pI

我创建了一个宏来从一个免费的代理站点中刮取代理。宏能够生成代理列表。但是,我的目的是从函数
GenerateProxy
打印此子例程
PrintProxies
中的代理列表。我不明白如何从该函数返回最终可以在子例程中打印的结果集合

我试过:

Function GenerateProxy() As Variant
    Dim oHttp As New ServerXMLHTTP60, Html As New HTMLDocument
    Dim iCol As New Collection, pIP$, pPort$, elem As Object
    
    With oHttp
        .Open "GET", "https://www.us-proxy.org/", True
        .send
        While .readyState < 4: DoEvents: Wend
        Html.body.innerHTML = .responseText
        For Each elem In Html.getElementsByTagName("tbody")(0).getElementsByTagName("tr")
            If InStr(elem.innerText, "yes") > 0 Then
                pIP = elem.getElementsByTagName("td")(0).innerText
                pPort = elem.getElementsByTagName("td")(1).innerText
                iCol.Add pIP & ":" & pPort
            End If
        Next elem
    End With
    GenerateProxy = iCol.count
End Function

Sub PrintProxies()
    Dim iCol As New Collection
    iCol = GenerateProxy()
    MsgBox "proxy list: " & iCol
End Sub
像这样:

子打印代理()
如长
iCol=生成氧()
MsgBox“代理列表:”&iCol
端接头

是的,至少有一些结果。我不能打印总收藏量
iCol
而不是
iCol.count
?谢谢,当然可以。您已经有了计数,因此为..创建一个
。。下一步
打印集合中每个项的循环。将“函数GenerateProxy()作为变量”更改为“函数GenerateProxy()作为集合”。然后将“GenerateProxy=iCol.count”更改为“Set GenerateProxy=iCol”。最后,在PrintProxy中,将“iCol=GenerateProxy()”更改为“Set iCol=GenerateProxy”。然后需要一个循环来迭代iCol集合以打印每个项目。另外两个项目。1.阅读Set关键字。2.如果某个特定类型可以完成任务,请不要使用变体。变体在VBA中起着关键作用,但不应以您现有的方式使用。您应该编辑原始问题以添加当前代码作为更新。
Function GenerateProxy() As Collection
    Dim oHttp As New ServerXMLHTTP60, Html As New HTMLDocument
    Dim iCol As New Collection, pIP$, pPort$, elem As Object
 
    With oHttp
        .Open "GET", "https://www.us-proxy.org/", True
        .send
        While .readyState < 4: DoEvents: Wend
        Html.body.innerHTML = .responseText
        For Each elem In Html.getElementsByTagName("tbody")(0).getElementsByTagName("tr")
            If InStr(elem.innerText, "yes") > 0 Then
                pIP = elem.getElementsByTagName("td")(0).innerText
                pPort = elem.getElementsByTagName("td")(1).innerText
                Debug.Print pIP & ":" & pPort
                iCol.Add pIP & ":" & pPort
            End If
        Next elem
    End With
 
    Set GenerateProxy = iCol
End Function
 
Sub PrintProxies()
    Dim iCol As Collection, col As Variant
 
    Set iCol = GenerateProxy
    For Each col In iCol
        Debug.Print col
    Next col
End Sub