我正在尝试从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
尝试使用以下定义之一
Sub WriteIn(IE) or Sub WriteIn(IE as variant)
方法Sub WriteIn(IE As Object)
的定义使用ByRef
参数。ByRef
是默认的,所以当ByRef/ByVal
被省略时,ByRef
被使用。在这种情况下,OpenIE()
方法中IE
变量的声明必须与参数声明(包括类型)匹配。简单地说,类型必须是一致的,因为ByRef
形参引用了实参。
所以你可以解决这个问题,要么声明为Object
或Variant
(但不能混合),要么简单地在函数Sub WriteIn(ByVal IE As Object)
中使用ByVal
。对于ByVal
,形参保存实参的值。