【问题标题】:How to enter Data in Internet explorer textbox using VBA excel如何使用 VBA excel 在 Internet Explorer 文本框中输入数据
【发布时间】:2020-01-15 15:26:34
【问题描述】:

我是 Excel VBA 的新手,但我想要完成的是在文本框中输入文本,其代码为

 <input name="txt_invoiceno" type="text" maxlength="16" id="txt_invoiceno" tabindex="1" class="text-left" style="width:150px;"> 

这是我的 VBA 代码

Dim Inv as Object
Inv = ie.Documents.getelementsbyId("txt_invoiceno")
Inv.value="mytext"

这只是给我一个错误

对象不支持此属性或方法。

我做错了吗? 请有人给我代码以在元素中输入文本。

【问题讨论】:

    标签: excel vba internet-explorer


    【解决方案1】:

    Dim Inv As Object和对象需要使用Set

    Set Inv = ie.Documents.getElementsById("txt_invoiceno")
    

    然后你需要检查Inv是否被发现,例如If Not Inv Is Nothing Then,然后再继续使用它。还要确保 id txt_invoiceno 在 HTML 文档中只存在一次,否则 HTML 无效(并且 Inv 是一个文本框数组)。

    有关更多信息,另请参阅:How do I get the value of text input field using JavaScript? 它适用于 JavaScript,但适用于 VBA。

    【讨论】:

      【解决方案2】:

      首先,正如PEH所说,使用Dim Inv As Object语句定义对象后,我们需要使用Set语句来设置值。

      另外,请参考以下选项,如果我们想通过ID属性查找元素,它将返回一个元素,如果我们想通过标签、类或名称属性查找元素,它将返回多个元素。

      IE.document.getelementbyid("ID").value = "value"       'Find by ID
      IE.document.getelementsbytagname("ID").value = "value"        'Find by tag
      IE.document.getelementsbyclassname("ID").value = "value"      'Find by class
      IE.document.getelementsbyname("ID").value = "value"           'Find by name
      

      所以,请修改您的代码如下(添加Set语句,将documents更改为document,将getelementsbyId更改为getelementbyId):

          Dim Inv As Object
          Set Inv = IE.document.getelementbyId("txt_invoiceno")
          Inv.Value = "mytext"
      

      编辑

      网页资源:

      <form id="form1"> 
          <input name="txt_invoiceno" type="text" maxlength="16" id="txt_invoiceno" tabindex="1" class="text-left" style="width:150px;"> 
      </form>
      

      VBA 脚本:

      Sub Test()
          Dim IE As Object
      
          Dim startDateText As Object, endDateText As Object
      
          Set IE = CreateObject("InternetExplorer.Application")
          With IE
              .Visible = True
              .Navigate "https://dillion132.github.io/default.html"
      
              While IE.ReadyState <> 4
                  DoEvents
              Wend
      
              Dim Inv As Object
              Set Inv = IE.document.getelementbyId("txt_invoiceno")
              Inv.Value = "mytext"
      
          End With
          Set IE = Nothing
      End Sub
      

      【讨论】:

      • 感谢您的回复。但是在用下面的代码 Dim Inv As Object Set Inv = ie.Document.getElementById("txt_invoiceno") Inv.Value = "190" 替换我的旧代码后,我得到 Object required 错误
      • 刚刚发现,输入框位于一个表单 form1 中。我们应该引用这个,还是不引用??
      • @John,请参考我的编辑并查看示例代码,如果使用表单标签,我们可以直接使用IE.document.getelementbyId 方法来查找表单内的元素。但是,如果您使用的是Iframe 标签,我们应该先找到IFrame 元素,然后从IFrame 的文档中找到一个元素。您可以查看以下链接:link 1link 2
      猜你喜欢
      • 1970-01-01
      • 2014-11-03
      • 2015-02-03
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多