我列出了大约600种需要库存数据的产品。 我可以从内部站点获得每种产品的信息,在这里我复制一个表,该表专门显示产品的存储位置(仓库,位置)。 由于VBA网络抓取将以串行方式进行,因此大约需要10到15分钟才能获得全部600个。

通过VBScript并行执行,可以使时间缩短很多。 我的VBA代码动态创建了下面的VBScript,该VBScript提取数据并将其放回到Excel工作表中。 它可以工作,但是一次只能运行50〜60个产品,无论我启动了多少个VBScript文件。 其余的失败,并且不返回输出或不将其放入工作表中。 有谁知道为什么会发生这种情况?

我可以做些什么来调整我的vbscript代码,以便更多成功吗? 谢谢你的帮助!

VBSCRIPT:

Dim oXML, oXL, product, sHTML, tabl, x, y
On Error Resume Next

Set oXL = GetObject(, "Excel.Application")
Set oXML = Wscript.CreateObject("WinHttp.WinHttpRequest.5.1")

oXML.Open "GET", "internal-site", False
oXML.SetAutoLogonPolicy AutoLogonPolicy_Always
oXML.send

sHTML = oXML.responseText

x = InStr(sHTML, "<table  cellpadding=1  border=0 cellspacing=0 align=center>")
y = InStr(sHTML, "</table><br>") + 8
tabl = Mid(sHTML, x, y - x)

RandomNumber = Int(Rnd * 500)
Wscript.Sleep RandomNumber
oXL.workbooks("a3.xlsb").sheets("A").Cells(8, 3) = Mid(tabl, 1, 32767)
oXL.workbooks("a3.xlsb").sheets("A").Cells(8, 4) = Mid(tabl, 32768, 32767)

===============>>#1 票数:2

  1. 要强调克里斯的观点:删除/禁用EVIL全局OERN来测试您的任务。 由于OERN 隐藏错误并让您的脚本继续处于未定义状态 ,因此应该有一条法律“不要在此处基于活动的全局OERN提出问题”。
  2. 使用任务管理器监视您的任务:有Excel僵尸吗? 内存耗尽?
  3. WinHttpRequest的.Status应该被检查。
  4. 应该检查两个InStr()调用的结果-尤其是如果在Mid()调用的减法(y-x)中使用它们的结果。
  5. Mid()调用之后的超时没有任何意义(Mid()在子字符串准备就绪之前不会返回); 通常,随机等待资源是一个坏主意[[c] sancho]。
  6. 发布所有相关代码:当然是对.Save,.Close和.Quit的调用吗? 您是否真的将所有内容都写到同一工作簿,工作表,单元格[(c)AnalystCave]?
  7. 考虑:在服务器上启动600个并发请求不是DOS攻击吗?

  ask by JasperD translate from so

未解决问题?本站智能推荐: