Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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
VBA-从ASP页面检索数据_Vba_Excel_Automation - Fatal编程技术网

VBA-从ASP页面检索数据

VBA-从ASP页面检索数据,vba,excel,automation,Vba,Excel,Automation,我最初创建了一个VBA宏,它将使用IE自动化在ASPX页面上单击特定的表单按钮。该页面有5个表单选项,您必须通过 组的下拉列表 位置的下拉列表 选择日期的图形日历 区域的列表框 生成报告按钮 我想从使用IE自动化转向更高效的方式。我看过其他文章,他们可以使用MSXML对象将数据拉回来。这是我能够从我读到的内容中构建出来的,但我不知道如何传递多个表单选项。这是一个特定于公司/内部的网站,因此很遗憾,我无法在外部发布链接示例 元素ID如下所示;数据部门、数据位置、计算日期、LBAREA、btnG

我最初创建了一个VBA宏,它将使用IE自动化在ASPX页面上单击特定的表单按钮。该页面有5个表单选项,您必须通过

  • 组的下拉列表
  • 位置的下拉列表
  • 选择日期的图形日历
  • 区域的列表框
  • 生成报告按钮
我想从使用IE自动化转向更高效的方式。我看过其他文章,他们可以使用MSXML对象将数据拉回来。这是我能够从我读到的内容中构建出来的,但我不知道如何传递多个表单选项。这是一个特定于公司/内部的网站,因此很遗憾,我无法在外部发布链接示例

元素ID如下所示;数据部门、数据位置、计算日期、LBAREA、btnGenReport

Public Sub XMLhttp_Search_Extract()
Dim URL As String
Dim XMLreq As Object
Dim POSTdata As String
Dim i As Integer

URL = "somewebURL.test.aspx"

POSTdata = "(" & Q("dlDivision") & ":" & Q("divisionNAMEHERE") & "," & Q("dlLocation") & ":" & Q("123 - Location") & ")"

Set XMLreq = CreateObject("MSXML2.XMLHTTP")
With XMLreq
    .Open "POST", URL, False
    .setRequestHeader "User-Agent", "Moilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0"
    .setRequestHeader "Referer", "somewebURL.test.aspx"
    .setRequestHeader "Content-Type", "application/json; charset=utf-8"
    .Send (POSTdata)

    For i = 1 To Len(.responseText) Step 1023
        MsgBox Mid(.responseText, i, i + 1023), _
            Title:=i & " to " & Min(i + 1023 - 1, Len(.responseText)) & " of " & Len(.responseText)
    Next i
End With
End Sub

Private Function Q(text As String) As String
    Q = Chr(34) & text & Chr(34)
End Function

Private Function Min(n1 As Long, n2 As Long) As Long
    Min = IIf(n1 < n2, n1, n2)
End Function
Public Sub-XMLhttp\u Search\u Extract()
将URL设置为字符串
Dim XMLreq作为对象
将POSTdata设置为字符串
作为整数的Dim i
URL=“somewebURL.test.aspx”
POSTdata=“(”&Q(“dlDivision”)和“&Q(“divisionNAMEHERE”)和“&Q(“dlLocation”)和“&Q(“123-Location”)和“)
设置XMLreq=CreateObject(“MSXML2.XMLHTTP”)
使用XMLreq
.打开“POST”,URL,False
.setRequestHeader“用户代理”、“Moilla/5.0(Windows NT 5.1;rv:23.0)Gecko/20100101 Firefox/23.0”
.setRequestHeader“Referer”、“somewebURL.test.aspx”
.setRequestHeader“内容类型”,“应用程序/json;字符集=utf-8”
.Send(POSTdata)
对于i=1到Len(.responseText)步骤1023
MsgBox Mid(.responseText,i,i+1023)_
标题:=i&“to”&Min(i+1023-1,Len(.responseText))和“of”&Len(.responseText)
接下来我
以
端接头
私有函数Q(文本作为字符串)作为字符串
Q=Chr(34)&文本和Chr(34)
端函数
私有函数最小值(n1为长,n2为长)为长
最小值=IIf(n1
确定要发送JSON吗?通常,您发送
application/x-www-form-urlencoded
表单数据,然后接收JSON。请尝试并显示站点的HTML代码。请参见-->此处似乎有一个输入错误:“Moilla”。应该是“Mozilla”。在此基础上,我会检查该标题的其余部分。