使用VBA输入数据

时间:2015-05-14 00:53:34

标签: excel vba excel-vba

我尝试使用VBA在某些HTML页面上提交数据。 HTML页面包含一些Java脚本,它是一个安全的页面。

我尝试使用下面的代码,但它只打开网站窗口,并且不会填写页面上的任何文字。

我知道我仍然需要添加登录名/密码验证码,msgbox(用于停止控制),提交按钮点击代码。

有人可以帮忙吗?

Sub Tes()
    Dim IE As Object
    Dim TrackID As Object

    Set IE = CreateObject("InternetExplorer.Application")

    IE.navigate "https://abcxxx.com/xxxx/xxxxxxx/Pages/CustInfo.aspx"

    IE.Visible = True

    Do Until IE.readystate = 4: DoEvents: Loop

    Set TrackID = IE.document.getelementbyid("abc00_abc001_234_5678_81b0_txtCustomerNo")

    TrackID.Value = Range("A2").Value

    TrackID.form.submit

End Sub

:::标题信息:::

<head id="ctl00_HEAD1"></head>
<body onload="javascript:if (typeof(_spBodyOnLoadWrapper) != 'undefined') _spBodyOnLoadWrapper();" scroll="yes">
    <form id="xxxForm" onsubmit="javascript:return WebForm_OnSubmit();" action="/xxxx/xxxxxxx/Pages/CustInfo.aspx" method="post" name="xxxForm">

<div></div>
<script type="text/javascript"></script>
<script type="text/javascript" src="/WebResource.axd?d=l9_fanifTkSGPMjqQJxGzkhm0A9CUTq0e2fMvidi8…mlhiyeYfbecR_SY_yD1HlOp8dnx1WI0dTdidvw1&t=634605258709717464"></script>
<script></script>
<script language="JavaScript" type="text/JavaScript"></script>
<script></script>
<script type="text/javascript" src="/WebResource.axd?d=wAwuGCcAd8-EEHMrxtDWcHPpbrIz4dtxvSld4vGrJ…1WyuhxU_XTb_KI5FuNTSBKr7UJL75sqY7cXp281&t=634605258709717464"></script>
<script type="text/javascript" src="/WebResource.axd?d=zXhglhR5yBgSmErqplHM82fD2Jq9gJIaO6HzhlL5E…MnKMvLQ-2WyEUUcPnCWpgOMpxqYDqDmsApddeA1&t=634605258709717464"></script>
<script type="text/javascript"></script>

2 个答案:

答案 0 :(得分:0)

您已经编辑了实际的网站地址,因此没有人能够真正找出您做错了什么。但是你的方法看起来很好 - 同样的代码在另一个网站上适用于我:

Sub main()
  Dim IE As Object
  Dim TrackID As Object
  Set IE = CreateObject("InternetExplorer.Application")
  IE.navigate "http://www.wikipedia.org/"
  IE.Visible = True
  Do Until IE.readystate = 4: DoEvents: Loop
  Set searchInput = IE.document.getelementbyid("searchInput")
  searchInput.Value = "Visual Basic for Applications"
  searchInput.form.submit
End Sub

答案 1 :(得分:0)

您有一个带有编辑名称​​ xxxForm 的表单。如果您希望设置值的所有输入元素都是此表单的子元素,我会将一个对象设置为表单并将其用作父表单。

我更喜欢使用Microsoft HTML元素声明。您可能需要将VBE的工具►参考 Microsoft Internet Controls Microsoft HTML对象库添加到您的项目中。

Sub Tes()
    Dim IE As new SHDocVw.InternetExplorer
    Dim eTrackForm As MSHTML.IHTMLElement

    Set IE = CreateObject("InternetExplorer.Application")

    IE.navigate "https://abcxxx.com/xxxx/xxxxxxx/Pages/CustInfo.aspx"

    IE.Visible = True
    IE.Silent = True

    Do while ie.busy or IE.readystate <> 4: DoEvents: Loop

    Set eTrackForm = IE.document.getelementbyid("xxxForm")

    if not eTrackForm is nothing then
        with eTrackForm
            .getelementbyid("ID_of_the_name_input").value = "Me"
            .getelementbyid("ID_of_the_password_input").value = "MyPass"
            .getelementbyid("abc00_abc001_234_5678_81b0_txtCustomerNo").value = Sheets("Sheet1").Range("A2").Value
            .submit
        end with
    end if

End Sub

看起来,一旦您将我的通用凭据和输入元素ID更改为实际凭据,它就会让您通过第一个凭据输入表单。这里没什么神奇的。实际上,这里提供的代码或其他代码作为可能的解决方案之间几乎没有什么区别。