Excel Internet Explorer自动化导致IE环境崩溃

时间:2014-05-21 21:25:49

标签: excel vba internet-explorer

我已成功自动化VBA Excel宏来迭代循环并点击一系列URL以触发服务器端脚本 - 这只需完成:

myIE.Navigate ("http://someURL.php?VARIABLE=" & var_string)

其中var_string在迭代过程中在循环中分配。在此之前,我已经通过以下方式清除了缓存,cookie和历史记录:

Shell "RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess #

我尝试了许多#,包括8,2,1等等,看看是否有任何影响(以及#的组合)。

我遇到的问题是,虽然整个脚本SOMETIMES有效,但如果我再次运行它,我导航到URL的行无法调用URL,即使域/ URL是完全实时的功能。我手动输入IE窗口的任何其他URL工作正常 - 只是我在循环内调用的那个。 IE暂时将我锁定在该域之外。如果我在上次运行它几个小时后回到脚本,它通常会有效。

域再次起作用,脚本也很好 - 我一直用另一台机器验证它。

就好像我在环境中设置一些环境并破坏了VBA中的Internet Explorer,即使脚本非常简单。

我为myIE对象尝试了CreateObject()GetObjectInternetExplorerMedium

1 个答案:

答案 0 :(得分:1)

如果您只需要触摸"触摸"该副作用的URL,您也可以使用XMLHTTP对象。在VBA中,转到菜单Tools,然后转到References并选择Microsoft XML,v6.0。然后:

Dim Request As New XMLHTTP
Request.open "GET", Url & "?VARIABLE=" & var_string, False
Request.send
' Check Request.status, probably for 200

一些注意事项:

  • 如果您遇到缓存问题,可能需要使用POST而不是GET
  • 如果服务器可以处理它,您应该在POST正文中传递数据
  • 应转义var_string的值,在本例中为URL编码
  • 如果您不想阻止等待回复,您可以异步发出请求(True的{​​{1}}第三个参数

按照这些说明,这里有一个更详细的例子:

open

对于缺失的部分,这里the code for CXMLHTTPHandler,我实际找到了through stackoverflowa definition of UrlEncode at stackoverflow

您应该专门针对您的需求Dim Request As New XMLHTTP Request.open "POST", Url, True Dim Handler As New CXMLHTTPHandler Handler.Initialize Request Set Request.onreadystatechange = Handler Request.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" Request.send UrlEncode("VARIABLE") & "=" & UrlEncode(var_string) ' This returns immediately, the check must now be done in the Handler ,甚至可以让它接受CXMLHTTPHandler过程并在实际的默认过程中调用它。 AddressOfm_xmlHttp时,默认程序应将Nothing设置为m_xmlHttp.readyState


编辑1:如果您的请求代码处于循环中,则需要将4语句分成两部分,以确保您使用新对象:

Dim ... New