请尝试以下操作:
Public Sub ImportData(ByVal urlToOpen As String)
以及
Public Sub CallRangeL_Urls()
Dim i As Range
For Each i In Sheet1.Range("L4:L200")
ImportData i.Value
Next i
End Sub
就我个人而言,我也会参考手册,我通常使用
Worksheets("SheetName")
但我知道很多人喜欢用代号。
ByVal
是合适的方法。
Public Sub CallRangeL_Urls()
Dim arr(), i As Long
arr = Application.Transpose(Sheet1.Range("L4:L200").Value)
For i = LBound(arr) To UBound(arr)
If InStr(arr(i), "http") > 0 Then ImportData arr(i)
Next i
End Sub
ImportData
返回提取值的函数的子函数。或者更好的方法是,创建一个类来保存xmlhttp对象,然后该对象有一个返回值的方法(这样您就不会一直创建和销毁对象—如果您在函数中创建对象,您就会这样做)。您还可以在第一个子部分中创建xmlhttp对象,并将其作为参数传递给函数(下面我将为您展示这方面的伪代码)。
Public Sub CallRangeL_Urls()
Dim arr(), i As Long
'code to create xmlhttp object
arr = Application.Transpose(Sheet1.Range("L4:L200").Value)
For i = LBound(arr) To UBound(arr)
If InStr(arr(i), "http") > 0 Then
Sheet1.Cells(i + 3, "E") = ImportData(arr(i), xmlhttpObject)
End If
Next i
End Sub
Public Function ImportData(ByVal urlToOpen As String, ByVal xmlhttpObject As Object) As String
''Any declarations
'Dim extractedValue As String
'Dim html As HTMLDocument
'Set html = New HTMLDocument
With xmlhttpObject
.Open "GET", urlToOpen, False
.send
html.body.innerHTML = .responseText
''code to extract value
'extractedValue = html.querySelector("someSelector")
ImportData = extractedValue
End Function