【问题标题】:IE Automation IssueIE自动化问题
【发布时间】:2018-01-31 21:33:05
【问题描述】:

我有一个代码可以导航到一个网站并填写一个包含 33 个输入的表单。

这是代码:

Dim i As Long
Dim IE As Object
Dim objCollection As Object

Set IE = CreateObject("InternetExplorer.Application")

IE.Visible = True

IE.Navigate "https://mylink.com"

Do While IE.Busy: DoEvents: Loop
Do While IE.ReadyState <> 4: DoEvents: Loop

Set objCollection = IE.Document.getElementsByTagName("input")

For i = 0 To objCollection.Length
objCollection(i).innertext = "Test " & i
Next i

Set IE = Nothing
Set objElement = Nothing
Set objCollection = Nothing

现在,这就像一个魅力。没有一个错误。

输入1接收“Test 1”;输入2接收“Test 2”; ... ; 输入33接收“Test 33”;

但是,我需要传递的实际数据在我的工作表中,范围为 AI43:AI75

如果我改变这部分

 For i = 0 To objCollection.Length
objCollection(i).innertext = "Test " & i
Next i

到这里

j = 1
For i = 0 To objCollection.Length
objCollection(i).innertext = Range("AI" & 42 + j).Text
j = j + 1
Next i

输出,每次都不一样,而且总是错的。输入的顺序变得疯狂,一些输入保持空白。

例子:输入1接收“数据1”,输入2接收“数据2”,输入3 接收到“数据 30”,输入 4 没有接收到,输入 5 接收到“数据” 10 英寸。

每次我运行它,输出都是不同的。任何想法为什么?想不通。

【问题讨论】:

  • 为什么要使用j?为什么不只是43 + i
  • @ScottHoltzman 你不知道你的处理器完成的数学方程越多,效率就越高?
  • @K.Dᴀᴠɪs - 我想我在那堂课上睡着了。
  • @K.Dᴀᴠɪs 相同的输出。没有任何改变
  • @K.Dᴀᴠɪs 对不起,我写错了。我做了 j = j + 1

标签: vba excel ie-automation


【解决方案1】:

不要使用For i = ... 语句,而是通过迭代集合本身来查看For Each 语句是否可以满足您的需要。

Dim IE As Object, i as Long
Dim objCollection As Object, o As Object  '  <--- New declaration

Set IE = CreateObject("InternetExplorer.Application")

IE.Visible = True

IE.navigate "https://mylink.com"

Do While IE.Busy: DoEvents: Loop
Do While IE.readyState <> 4: DoEvents: Loop

Set objCollection = IE.document.getElementsByTagName("input")

For Each o In objCollection
    i = i + 1
    o.innerText = "Test " & i
Next o

Set IE = Nothing
Set objElement = Nothing
Set objCollection = Nothing

【讨论】:

  • @RyanWildry 更新答案
  • @K.Davis 没用。我认为问题出在我的细胞长度上。我的范围有 200 多个字符的单元格。当我将单元格更改为最多 10 个字符时,它工作得很好。想不通为什么。我的选项不多了
  • @K.Davis 非常感谢你!!!它确实奏效了。我正在尝试使用不同的代码。使用“For Each o”而不是“For i = 0 To objCollection.Lenght”不会让程序迷路。不知道为什么,但它奏效了。我会用答案更新帖子
  • @Guilherme 无需用答案更新您的问题。只需将此标记为已接受。
猜你喜欢
  • 2017-10-02
  • 2016-09-30
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 2018-11-28
  • 2019-03-29
  • 1970-01-01
  • 2016-09-04
相关资源
最近更新 更多