Vba 使用InStr()搜索HTML时出错

Vba 使用InStr()搜索HTML时出错,vba,excel,Vba,Excel,在搜索HTML代码时,我很难将InStr()用于多行输入-下面是我代码的简化版本,其中的注释显示debug.print中的错误: Sub TestInStr() Dim XMLPage As New MSXML2.XMLHTTP60 Dim html XMLPage.Open "GET", "https://www.hltv.org/stats/matches/mapstatsid/48623/masterminds-vs-riotous-raccoons", False XMLPage.se

在搜索HTML代码时,我很难将InStr()用于多行输入-下面是我代码的简化版本,其中的注释显示debug.print中的错误:

Sub TestInStr()
Dim XMLPage As New MSXML2.XMLHTTP60
Dim html

XMLPage.Open "GET", "https://www.hltv.org/stats/matches/mapstatsid/48623/masterminds-vs-riotous-raccoons", False
XMLPage.send
If XMLPage.Status <> 200 Then MsgBox XMLPage.statusText
html = XMLPage.responseText

Dim str1, str2, str3, str4 As String

'Multi Line HTML
str1 = "<div class=""bold"">Breakdown</div>" & vbCrLf & "                    </div>" & vbCrLf & "                    <div class=""match-info-row"">" & vbCrLf & "                      <div class=""right"">"
str2 = "</div>" & vbCrLf & "                      <div class=""bold"">Team rating</div>"
Debug.Print InStr(html, str1) 'Cant find, value = 0 (Multi Line HTML)
Debug.Print InStr(html, str2) 'Cant find, value = 0 (Multi Line HTML)


'Single Line HTML
str3 = "<div class=""bold"">Breakdown</div>"
str4 = "<div class=""match-info-row"">"
Debug.Print InStr(html, str3) 'Found, value = 15503 (Single Line HTML)
Debug.Print InStr(html, str4) 'Found, value = 15208 (Single Line HTML)
End Sub
Sub TestInStr()
Dim XMLPage作为新的MSXML2.XMLHTTP60
暗淡的html
XMLPage.Open“GET”https://www.hltv.org/stats/matches/mapstatsid/48623/masterminds-vs-riotous-raccoons”“错
XMLPage.send
如果为XMLPage.Status 200,则为MsgBox XMLPage.statusText
html=XMLPage.responseText
将str1、str2、str3、str4作为字符串
'多行HTML
str1=“分解”&vbCrLf&&vbCrLf&&vbCrLf&&vbCrLf&”
str2=“”&vbCrLf和“团队评级”
Debug.Print InStr(html,str1)'找不到,值=0(多行html)
Debug.Print InStr(html,str2)'找不到,值=0(多行html)
'单行HTML
str3=“故障”
str4=“”
找到Debug.Print InStr(html,str3),值=15503(单行html)
找到Debug.Print InStr(html,str4),值=15208(单行html)
端接头
以下是源HTML代码:

            <div class="bold">Breakdown</div>
            </div>
            <div class="match-info-row">
              <div class="right">0.91 : 1.27</div>
              <div class="bold">Team rating</div>
细分
0.91 : 1.27
团队评级
如图所示,当我尝试将多行HTML传递到InStr()中时,返回值为0,没有找到任何内容。但是,如果我也这样做,把字符串分解成一行,然后重复——效果很好


在搜索HTML时,是否有任何方法可以将多行文本传递到InStr()中并获得返回?谢谢

您可能需要使用
vbCr
vbLf
而不是
vbCrLf
来匹配
\n
。您可以使用
Asc(Mid(html_source,position,1))
来确定html源代码中的换行符使用了什么


希望对您有所帮助

您可能需要使用
vbCr
vbLf
而不是
vbCrLf
来匹配
\n
。您可以使用
Asc(Mid(html_source,position,1))
来确定html源代码中的换行符使用了什么


希望这会有所帮助

您的字符串中的空格数是否与HTML中的相同?HTML甚至包含空格吗?(在您用来查看它的任何应用程序中都可能是这样的。)HTML是否包含CR/LF字符,或者可能仅包含LF或仅包含CR字符?(或者,也可能两者都没有,只是查看器在显示,就好像它们在那里一样。)您可能需要使用
vbCr
vbLf
而不是
vbCrLf
来匹配
\n
。您可以使用
Asc(Mid(html_source,position,1))
来区分源代码中的回车和换行。非常感谢-你们太棒了!!vbLf修复了它。如果你可以把这篇文章作为一个答案,我会把它标记为完整的,以供其他人参考。再次感谢@YowE3K我将注释复制到了一个答案中。您的字符串中的空格数是否与HTML中的相同?HTML甚至包含空格吗?(在您用来查看它的任何应用程序中都可能是这样的。)HTML是否包含CR/LF字符,或者可能仅包含LF或仅包含CR字符?(或者,也可能两者都没有,只是查看器在显示,就好像它们在那里一样。)您可能需要使用
vbCr
vbLf
而不是
vbCrLf
来匹配
\n
。您可以使用
Asc(Mid(html_source,position,1))
来区分源代码中的回车和换行。非常感谢-你们太棒了!!vbLf修复了它。如果你可以把这篇文章作为一个答案,我会把它标记为完整的,以供其他人参考。再次感谢@YowE3K我把评论复制成了一个答案。