Vba 为什么一次运行数百个VBS文件时,每次只有大约50个成功
我有一份大约600种产品的清单,需要从中获取库存数据。 我可以从一个内部站点获取每个产品的信息,在那里我复制了一个表,该表专门显示了产品的存储位置(仓库、位置)。 由于VBA webscraping将以串行方式完成此操作,因此需要大约10~15分钟才能获得所有600个 通过VBScript并行执行,我可以大大缩短此时间。 我的VBA代码动态创建下面的VBScript,该脚本将数据拉回到Excel工作表中。 它可以工作,但无论我启动了多少个VBScript文件,一次只能为50~60个产品工作。其余部分失败,不返回输出或不将其放入工作表。 有人知道为什么会发生这种情况吗 我可以做些什么来调整我的vbscript代码,这样更多的代码就会成功? 谢谢你的帮助 VBSCRIPT:Vba 为什么一次运行数百个VBS文件时,每次只有大约50个成功,vba,excel,vbscript,Vba,Excel,Vbscript,我有一份大约600种产品的清单,需要从中获取库存数据。 我可以从一个内部站点获取每个产品的信息,在那里我复制了一个表,该表专门显示了产品的存储位置(仓库、位置)。 由于VBA webscraping将以串行方式完成此操作,因此需要大约10~15分钟才能获得所有600个 通过VBScript并行执行,我可以大大缩短此时间。 我的VBA代码动态创建下面的VBScript,该脚本将数据拉回到Excel工作表中。 它可以工作,但无论我启动了多少个VBScript文件,一次只能为50~60个产品工作。其余
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)
Dim-oXML、oXL、product、sHTML、tabl、x、y
出错时继续下一步
Set oXL=GetObject(,“Excel.Application”)
设置oXML=Wscript.CreateObject(“WinHttp.WinHttpRequest.5.1”)
打开“获取”,“内部站点”,False
oXML.SetAutoLogonPolicy自动生成策略\u始终
发送
sHTML=oXML.responseText
x=仪表(sHTML,“”)
y=仪表(sHTML,“
”)+8
tabl=Mid(sHTML,x,y-x)
随机数=整数(Rnd*500)
睡眠随机数
oXL.工作簿(“a3.xlsb”).表(“A”).单元格(8,3)=中间(表132767)
oXL.工作簿(“a3.xlsb”).表(“A”).单元格(8,4)=中间(表32768,32767)
第一件事首先,摆脱出错时的
,然后继续下一步。这是邪恶的,而且可能隐藏了你问题的根本原因。为什么你会睡眠一个随机的时间间隔?可能您需要最少的睡眠时间。“(…)VBA webscraping将以串行方式完成此操作(…)”-您是否检查了此问题:?您的问题可能是最后两行-当工作簿被另一个线程锁定以进行写入时,某些线程正在尝试写入工作簿。您可能需要检查写入是否成功,如果没有,请休眠并重试。如果这是内部操作:您不能直接从数据库读取信息,而不是从网站上抓取信息吗?