使用VBA

时间:2017-10-28 08:39:14

标签: html excel-vba vba excel

我知道有关于这个主题的各种问题,我已经阅读了它们,因为我是新手开发者,我无法将其应用于我的具体情况,即在阅读完所有内容之后,我仍然无法使其工作。所以我会问我的具体情况。谢谢你的帮助。

我正在尝试使用vba代码来检索以下html标记中的数据。

<td class='overview-last15'><strong>LAST 15:</strong>X6X0X17X1X011X3</td>

我想提取X6X0X17X1X011X3部分。

“Last 15”在下面显示的完整html标记中出现10次,我想为每一个提取15个字符,首先提取第一个。

我将包含指向html页面的链接,因为代码太长而无法在此处发布。请“查看来源”。

https://www.ladbrokes.com.au/cache/formguides/formguide-2017-10-28-moonee valley-2.html

(希望链接有效,我尝试发布代码并且它太长了!)

提前致谢

这是我到目前为止尝试过的代码

Sub testweb()

Set objIE = CreateObject("InternetExplorer.Application")
objIE.Top = 0
objIE.Left = 0
objIE.Visible = True

On Error Resume Next
objIE.navigate ("https://www.ladbrokes.com.au/cache/formguides/formguide-2017-10-28-moonee%20valley-2.html")

Do
DoEvents
If Err.Number <> 0 Then
objIE.Quit
Set objIE = Nothing
GoTo mystart:
End If
Loop Until objIE.readystate = 4 ' 4 is complete

' I've tried all these lines
Dim myData, oHtml
'Set myDadta=oHtml.getElementById("myDiv").getElementsByClassName("overview-table")(0).getElementsByClassName("overview-last15")(0).innerText
'getElementsByTagName("Table")(0).getElementsByTagName("td")(1)
'Set myData = oHtml.getElementById("runner 1").getElementsByClassName("overview-table")(0).getElementsByClassName("title-entrant-name")(0).innerText
'Set myDada = oHtml.getElementByTitle("titlerunner-1").getElementsByClassName("overview-table")(0).getElementsByClassName("title-entrant-name")(0).innerText

MsgBox myData

' we quit the application Internet Explorer or close it
'objIE.Quit

End Sub

我想看到的是X6X0X17X1X011X3而不是没有任何内容的msgbox。

1 个答案:

答案 0 :(得分:0)

我认为你在寻求编程帮助。请理解这个答案是为了回应这样的请求,即使它可能无法立即解决您的问题。

从代码顶部的Option Explicit开始。然后声明所有变量。在每个人应该使用的数据类型的迷宫中战斗。尽可能避免简单的解决方案。它们太宽泛了。您可以越精确地定义数据类型,您就越能理解它,您就能越好地处理它。节省了大量时间!

现在拿这行代码。 Set myDadta=oHtml.getElementById("myDiv").getElementsByClassName("overview-table")(0).getElementsByClassName 所有getElement函数都返回HTMLElements或IHTMLElements,它们具有通向innerText或outerText属性的属性,这些属性是字符串。您可以分析(读取)这些字符串并找出是否有正确的字符串。上面的代码示例将元素元素的元素分配给一个对象,并且您不能轻易找出是否包含要包含要删除的文本的页面部分,以及该网站的其他部分碰巧抓住了你或者你犯了哪些错误。 当您查看MSDN教授此主题的方式时,您会发现它们会破坏这样的代码。

Dim myDiv as HTMLElement
Dim myClass As HTMLElement
Dim myData As HTMLElement         ' you might have a type here "MyDadta"

Set myDiv = oHtml.getElementById("myDiv")
Set myClass = MyDiv.getElementsByClassName("overview-table")(0)
Set myData=myClass.getElementsByClassName

关键是您可以逐步检查您指定的元素中包含的确切内容。在确定拥有正确的innerText之后,您可能会在最终代码中再次将元素放在一起。坦率地说,我怀疑你会这样做。下次网站进行更改时,您可能需要重复分析,然后您必须再次将所有内容分开。此外,更有条理地构建的代码可能更稳定。没有证据表明你的更紧凑的代码实际上更好或运行速度甚至只有千分之一秒。

包含您感兴趣的字符串的最终innerText是数据类型字符串。你可以简单地使用Instr函数来寻找“strong&gt;”并在下一个“&lt;”之前提取字符。