单击网站上的所有复选框
Click all checkboxes on website
我有(在 Excel、VBA 中)一个将导航到此网页的子程序:
http://www.nordea.dk/wemapp/currency/dk/valutaKurser
并复制报价。但是,我想删除所有费率,只添加我的子需要的费率。
为此,我需要选中所有框(table 左侧),但框的数量不是恒定的 - 所以我无法对框名称进行硬编码。
我想一种方法是提取整个 html,确定行数,然后循环。但它似乎很不方便。当然有一些更聪明的方法,需要更少的代码和更少的存储空间?
您可以通过 vbNewLine
Split()
table 并在集合的每一行中搜索货币(注意 headers).
由于输入的名称类似于 table:body:rows:2:cells:1:cell:check 你可以将货币与复选框匹配。
实际上它看起来像(直到获取元素名称):
Function FirstRow(myArray() As String, Optional curr As String) As Long
If curr = "" Then
curr = "*[A-Z][A-Z][A-Z]/[A-Z][A-Z][A-Z]*"
Else
curr = "*" & curr & "*"
End If
For i = LBound(myArray) To UBound(myArray)
If myArray(i) Like curr Then 'FX denoted as "XXX/XXX"
FirstRow = i
Exit Function
End If
Next i
End Function
Sub ert()
Dim myArray() As String, URLStr As String
URLStr = "http://www.nordea.dk/wemapp/currency/dk/valutaKurser"
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = False
ie.Navigate URLStr
Do Until (ie.readyState = 4 And Not ie.Busy)
DoEvents
Loop
On Error GoTo Err:
Data = ie.Document.body.innerHTML 'innerText
If False Then
Err:
Data = ie.Document.body.innerHTML
End If
myArray = Split(Data, "<tr>") 'vbNewLine) 'vbCrLf)
'For i = LBound(myArray) To UBound(myArray)
' Cells(i + 1, 1).Value2 = myArray(i)
'Next
Dim curr() As String
ReDim curr(2)
curr(0) = "DKK/NOK"
curr(1) = "EUR/SEK"
curr(2) = "USD/CHF"
For i = LBound(curr) To UBound(curr)
x = FirstRow(myArray, curr(i)) - FirstRow(myArray) + 1
MsgBox "table:body:rows:" & x & ":cells:1:cell:check"
Next i
ie.Quit
Set ie = Nothing
End Sub
对不起,vbNewLine
这次不会剪了,我的错。此外,检查命名元素应该不会那么难,如果您提供了用于检查所有框的代码片段,我什至会试一试。
我有(在 Excel、VBA 中)一个将导航到此网页的子程序:
http://www.nordea.dk/wemapp/currency/dk/valutaKurser
并复制报价。但是,我想删除所有费率,只添加我的子需要的费率。
为此,我需要选中所有框(table 左侧),但框的数量不是恒定的 - 所以我无法对框名称进行硬编码。
我想一种方法是提取整个 html,确定行数,然后循环。但它似乎很不方便。当然有一些更聪明的方法,需要更少的代码和更少的存储空间?
您可以通过 vbNewLine
Split()
table 并在集合的每一行中搜索货币(注意 headers).
由于输入的名称类似于 table:body:rows:2:cells:1:cell:check 你可以将货币与复选框匹配。
实际上它看起来像(直到获取元素名称):
Function FirstRow(myArray() As String, Optional curr As String) As Long
If curr = "" Then
curr = "*[A-Z][A-Z][A-Z]/[A-Z][A-Z][A-Z]*"
Else
curr = "*" & curr & "*"
End If
For i = LBound(myArray) To UBound(myArray)
If myArray(i) Like curr Then 'FX denoted as "XXX/XXX"
FirstRow = i
Exit Function
End If
Next i
End Function
Sub ert()
Dim myArray() As String, URLStr As String
URLStr = "http://www.nordea.dk/wemapp/currency/dk/valutaKurser"
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = False
ie.Navigate URLStr
Do Until (ie.readyState = 4 And Not ie.Busy)
DoEvents
Loop
On Error GoTo Err:
Data = ie.Document.body.innerHTML 'innerText
If False Then
Err:
Data = ie.Document.body.innerHTML
End If
myArray = Split(Data, "<tr>") 'vbNewLine) 'vbCrLf)
'For i = LBound(myArray) To UBound(myArray)
' Cells(i + 1, 1).Value2 = myArray(i)
'Next
Dim curr() As String
ReDim curr(2)
curr(0) = "DKK/NOK"
curr(1) = "EUR/SEK"
curr(2) = "USD/CHF"
For i = LBound(curr) To UBound(curr)
x = FirstRow(myArray, curr(i)) - FirstRow(myArray) + 1
MsgBox "table:body:rows:" & x & ":cells:1:cell:check"
Next i
ie.Quit
Set ie = Nothing
End Sub
对不起,vbNewLine
这次不会剪了,我的错。此外,检查命名元素应该不会那么难,如果您提供了用于检查所有框的代码片段,我什至会试一试。