Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将html结果页定义为变量以从php页面提取内容时,访问vba_Vba_Excel_Ms Access_Scrape - Fatal编程技术网

将html结果页定义为变量以从php页面提取内容时,访问vba

将html结果页定义为变量以从php页面提取内容时,访问vba,vba,excel,ms-access,scrape,Vba,Excel,Ms Access,Scrape,我的客户机试图使用access VBA脚本将字符串发送到我创建的php页面,然后将页面上返回的数据返回到他的数据库中 我使用mac电脑,无法运行任何VB代码,但这里是我能够找到的(两个版本),但都在第一条dim语句中爆炸 Private Sub Command1_Click() Dim iHTML As HTMLDocument Dim objHttp As MSXML2.ServerXMLHTTP set objHttp = CreateObject("Msxml2.ServerXMLHTT

我的客户机试图使用access VBA脚本将字符串发送到我创建的php页面,然后将页面上返回的数据返回到他的数据库中

我使用mac电脑,无法运行任何VB代码,但这里是我能够找到的(两个版本),但都在第一条dim语句中爆炸

Private Sub Command1_Click()

Dim iHTML As HTMLDocument
Dim objHttp As MSXML2.ServerXMLHTTP
set objHttp = CreateObject("Msxml2.ServerXMLHTTP")
objHttp.open "GET", "http://www.bestenergyctri.com/zipcode.php?isValidate=adb&address1=352%20w%2046&address2=&city=new%20york&state=ny&zip5= 
", False
objHttp.send

Set iHTML = objHttp.ResponseText

straddress1 = iHTML.getElementsByClassName("detect").Item(x - 1).getElementsByClassName("thedata").Item(0).getElementsByClassName("address1").Item(1).innerText
straddress2 = iHTML.getElementsByClassName("detect").Item(x - 1).getElementsByClassName("thedata").Item(0).getElementsByClassName("address2").Item(1).innerText
strcity = iHTML.getElementsByClassName("detect").Item(x - 1).getElementsByClassName("thedata").Item(0).getElementsByClassName("City").Item(1).innerText
strstate = iHTML.getElementsByClassName("detect").Item(x - 1).getElementsByClassName("thedata").Item(0).getElementsByClassName("State").Item(1).innerText
strzip5 = iHTML.getElementsByClassName("detect").Item(x - 1).getElementsByClassName("thedata").Item(0).getElementsByClassName("Zip5").Item(1).innerText
strzip4 = iHTML.getElementsByClassName("detect").Item(x - 1).getElementsByClassName("thedata").Item(0).getElementsByClassName("Zip4").Item(1).innerText

SaveWebInfo straddress1, straddress2, strcity, strstate, strzip5, strzip4
Set iHTML = Nothing
Set objHttp = Nothing

End Sub

有人对如何将页面正确读入变量以便对其进行解析有什么建议吗


谢谢

这里是一个使用CSS querySelector并避免使用匈牙利符号的简单示例

代码:

Option Explicit

Sub test()

    Dim iHTML As New HTMLDocument, objHttp As MSXML2.ServerXMLHTTP60 '<== Note this is version specific syntax. 60 is for Excel 2016
    Set objHttp = New MSXML2.ServerXMLHTTP60
    objHttp.Open "GET", "http://www.bestenergyctri.com/zipcode.php?isValidate=adb&address1=352%20w%2046&address2=&city=new%20york&state=ny&zip5=", False
    objHttp.send

    Dim address1  As String, address2 As String, city As String, state As String, zip5 As String, zip4 As String
    With iHTML
        .body.innerHTML = objHttp.ResponseText
        address1 = .querySelector(".address1").innerText
        address2 = .querySelector(".address2").innerText
        city = .querySelector(".City").innerText
        state = .querySelector(".State").innerText
        zip5 = .querySelector(".Zip5").innerText
        zip4 = .querySelector(".Zip4").innerText
    End With

    Debug.Print "Address 1: " & address1
    Debug.Print "Address 2: " & address2
    Debug.Print "City: " & city
    Debug.Print "State: " & state
    Debug.Print "Zip5: " & zip5
    Debug.Print "Zip4: " & zip4
End Sub
选项显式
子测试()
Dim iHTML作为新的HTMLDocument,objHttp作为MSXML2.ServerXMLHTTP60'工具>参考:

Option Explicit

Sub test()

    Dim iHTML As New HTMLDocument, objHttp As MSXML2.ServerXMLHTTP60 '<== Note this is version specific syntax. 60 is for Excel 2016
    Set objHttp = New MSXML2.ServerXMLHTTP60
    objHttp.Open "GET", "http://www.bestenergyctri.com/zipcode.php?isValidate=adb&address1=352%20w%2046&address2=&city=new%20york&state=ny&zip5=", False
    objHttp.send

    Dim address1  As String, address2 As String, city As String, state As String, zip5 As String, zip4 As String
    With iHTML
        .body.innerHTML = objHttp.ResponseText
        address1 = .querySelector(".address1").innerText
        address2 = .querySelector(".address2").innerText
        city = .querySelector(".City").innerText
        state = .querySelector(".State").innerText
        zip5 = .querySelector(".Zip5").innerText
        zip4 = .querySelector(".Zip4").innerText
    End With

    Debug.Print "Address 1: " & address1
    Debug.Print "Address 2: " & address2
    Debug.Print "City: " & city
    Debug.Print "State: " & state
    Debug.Print "Zip5: " & zip5
    Debug.Print "Zip4: " & zip4
End Sub


*最后两个参考文献是很重要的。

对于您的问题,“炸弹”不是很有用的描述。在任何情况下,您都不能在Mac上使用这种方法,因为它使用COM自动化。
.Item(x-1)
-是否在代码的其他地方声明了
x
?如果没有,则只要在包含此代码的模块顶部有
选项Explicit
,就会产生“变量未定义”错误。如果您没有
选项Explicit
,并且
x
未在其他地方声明,则
。项目(x-1)
。项目(-1)
相同,并且在第一个Dim上您会说两个脚本“bomb”(无论这意味着什么,下次请非常清楚…)。这可能表明引用Microsoft HTML对象库没有在工具->引用(Microsoft VBA屏幕上的菜单选项)下打勾。我知道“炸弹”是一个无用的描述符,但是,正如我所说,我没有一台pc可供测试,所以我必须传递我客户的评论,他发誓他能够编写这个脚本,现在,我正在帮助实现这一说法。我会问他有关参考图书馆的事。如果其他人有任何想法可以帮助他,我将不胜感激!这个问题解决了吗?不用担心。让我知道它是如何进行的,如果答案是正确的,请记住接受作为答案,以阻止这个问题再次出现。很高兴进一步澄清细节。谢谢!所以你不喜欢奇怪的html引用,哈哈!但我还有一个问题,他试图运行它,但他在access中找不到添加工具>>参考的地方-我能告诉他什么?再次感谢您在Access中按Alt+F11打开Visual Basic编辑器,然后按工具>引用。。。。