如何从VBA中的另一个Sub引用IE.document

时间:2016-10-02 11:52:32

标签: vba internet-explorer object reference

我正在尝试从Internet Explorer读取值并将它们写入Excel工作表。为了保持代码整洁,我希望在另一个过程中使用某些代码部分。我正在努力引用IE.document。

这是我运作的一个简化示例(在此示例中已准备就绪状态):

Sub OpenAndWriteIn()

        Set IE = CreateObject("InternetExplorer.Application")
        With IE
            .Visible = True
            .navigate "http://www.huffingtonpost.com"
        End With

        'Write in the Values to Sheet
        ActiveSheet.Range("A1") = IE.document.getElementsByClassName("card__link")(0)
        ActiveSheet.Range("B1") = IE.document.getElementsByClassName("card__link")(1)

        MsgBox "Finished"
        IE.Quit

End Sub

这是我想要的,但它不起作用:

Sub OpenIE()

        Set IE = CreateObject("InternetExplorer.Application")
        With IE
            .navigate "http://www.huffingtonpost.com"
        End With

        'Based on the SearchedValue make a decision
        WriteIn IE
        IE.Quit

End Sub

Sub WriteIn(IE As Object)

    ActiveSheet.Range("A1") = IE.document.getElementsByClassName("card__link")(0)
    ActiveSheet.Range("B1") = IE.document.getElementsByClassName("card__link")(1)

    MsgBox "Finished"

End Sub

2 个答案:

答案 0 :(得分:0)

尝试使用以下定义之一

Sub WriteIn(IE) or Sub WriteIn(IE as variant)

答案 1 :(得分:0)

方法Sub WriteIn(IE As Object)的定义使用ByRef参数。 ByRef是默认值,因此省略ByRef/ByVal时会使用ByRef。在这种情况下,方法IE中的OpenIE()变量声明必须与包含类型的参数声明匹配。只是类型必须一致,因为ByRef参数引用了参数。

因此,您可以将问题解决为ObjectVariant(但不得混合使用)或仅在函数ByVal中使用Sub WriteIn(ByVal IE As Object)。使用ByVal时,参数包含参数的值。