Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA自动化(宏)isn';在IE标签上工作不太好_Excel_Vba_Internet Explorer_Automation - Fatal编程技术网

Excel VBA自动化(宏)isn';在IE标签上工作不太好

Excel VBA自动化(宏)isn';在IE标签上工作不太好,excel,vba,internet-explorer,automation,Excel,Vba,Internet Explorer,Automation,我是VBA的新手,这是我的第二篇文章,我的英语说得不太好。所以,请对我放松点 上周,我在IE上尝试自动化某些过程时遇到了一些问题。在新窗口打开时,我的宏运行得很好,但当我尝试在选项卡上运行相同的宏时,它不起作用。宏似乎(可能)无法识别实际的选项卡。我在这里发布了这个问题,一个叫Deepak MSFT的了不起的家伙帮了我很多。他教我如何在标签上运行宏,它几乎100%有效 问题: 1-宏有时工作,有时不工作。例如,昨天,我遇到了错误424、91,有时,它只是打开了另一个选项卡,而没有插入值(由于“O

我是VBA的新手,这是我的第二篇文章,我的英语说得不太好。所以,请对我放松点

上周,我在IE上尝试自动化某些过程时遇到了一些问题。在新窗口打开时,我的宏运行得很好,但当我尝试在选项卡上运行相同的宏时,它不起作用。宏似乎(可能)无法识别实际的选项卡。我在这里发布了这个问题,一个叫Deepak MSFT的了不起的家伙帮了我很多。他教我如何在标签上运行宏,它几乎100%有效

问题:

1-宏有时工作,有时不工作。例如,昨天,我遇到了错误424、91,有时,它只是打开了另一个选项卡,而没有插入值(由于“On Error Resume Next”(错误恢复下一步),因此出现了perheaps)。我想这是因为其中一个网站的速度很慢。我试图将时间值增加到7秒,但即使如此,也没有成功。我测试了一整天,结果非常不稳定,有时有效,有时无效。但是今天它正在运行(所有的网站都是稳定的)。你知道如何解决这种不稳定吗

2-有两个网站(第二个和第三个),我使用querySelector查找用于插入值的框。这两个网站在我公司70%的个人电脑上运行,只有这两个网站在另外30%的电脑上不运行。我在所有网站上安装了相同版本的IE(11.0.9600)、Excel(2007,SP3)和Windows(W7),但即便如此,只有这两个带有queryselector的网站不起作用。没有错误。宏只是不插入值。也许我遗漏了一些使queryselector在那些PC上工作的东西,但是所有的引用都匹配。我在谷歌上搜索了前5页,试图找到一个解决方案,但失败了。我想有个女巫在电脑周围飞来飞去。你能帮我吗

3-我试图在Excel 2016或Windows 10上高于2007的其他版本的Excel上运行宏时,完全不稳定。有没有人有一个好的解决方案,可以让程序在Excel 2016上运行(我的所有公司明年都会运行这个版本),而不必重新运行

非常感谢各位。这是我的密码:

Sub ademo()

    Dim i As Long
    Dim URL As String
    Dim IE As Object

    Set IE = CreateObject("InternetExplorer.Application")


    IE.Visible = True

    'TAB 1

    URL = "https://servicos.ibama.gov.br/ctf/publico/areasembargadas/ConsultaPublicaAreasEmbargadas.php"


    IE.Navigate2 URL

    Do While IE.readyState = 4: DoEvents: Loop   'Do While
    Do Until IE.readyState = 4: DoEvents: Loop   'Do Until


    IE.document.getElementById("num_cpf_cnpj").Value = "demo1" 'Sheets("Main").Range("C10")
    IE.document.getElementById("Emitir_Certificado").Click



 'TAB 2 - DAP

    On Error Resume Next
    IE.Visible = True
    IE.Navigate2 "http://smap14.mda.gov.br/extratodap/", 2048&


    Application.Wait (Now + TimeValue("0:00:04"))

    Set IE = GetIE("http://smap14.mda.gov.br/extratodap/")

    Do While IE.Busy
            Application.Wait DateAdd("s", 1, Now)
        Loop

        Set doc = IE.document

        On Error Resume Next
        Set Target = IE.document.querySelector("#corpo > div > div > div:nth-child(1) > button")
        Target.Click
            Do While IE.Busy
            Application.Wait DateAdd("s", 1, Now)
            Loop
            doc.getElementById("txtCPF_CNPJ").Value = "demo2"




    'TAB 3 - CNDT

    IE.Visible = True
    On Error Resume Next
    IE.Navigate2 "http://aplicacao.jt.jus.br/cndtCertidao/inicio.faces", 2048&


    Application.Wait (Now + TimeValue("0:00:04"))

    Set IE = GetIE("http://aplicacao.jt.jus.br/cndtCertidao/inicio.faces")

    Do While IE.Busy
            Application.Wait DateAdd("s", 1, Now)
        Loop

        Set doc = IE.document

        On Error Resume Next
        Set target2 = IE.document.querySelector("#corpo > div > div:nth-child(2) > input:nth-child(1)")
        target2.Click
            Do While IE.Busy
            Application.Wait DateAdd("s", 1, Now)
            Loop
            doc.getElementById("gerarCertidaoForm:cpfCnpj").Value = "demo3"






    'TAB 4 - CND

    On Error Resume Next
    IE.Visible = True
    IE.Navigate2 "http://servicos.receita.fazenda.gov.br/Servicos/certidao/CNDConjuntaInter/InformaNICertidao.asp?tipo=2", 2048&


    Application.Wait (Now + TimeValue("0:00:04"))

    Set IE = GetIE("http://servicos.receita.fazenda.gov.br/Servicos/certidao/CNDConjuntaInter/InformaNICertidao.asp?tipo=2")

    Do While IE.Busy
            Application.Wait DateAdd("s", 1, Now)
        Loop

        Set doc = IE.document

        On Error Resume Next
        IE.document.getElementsByName("NI")(0).Value = "demo4"



    'TAB 5 - IMPROBIDADE

    IE.Visible = True
    IE.Navigate2 "http://www.cnj.jus.br/improbidade_adm/consultar_requerido.php?validar=form", 2048&


    Application.Wait (Now + TimeValue("0:00:04"))

    Set IE = GetIE("http://www.cnj.jus.br/improbidade_adm/consultar_requerido.php?validar=form")

    IE.document.getElementById("num_cpf_cnpj").Value = "demo5"



End Sub


Function GetIE(sLocation As String) As Object

    Dim objShell As Object, objShellWindows As Object, o As Object
    Dim sURL As String
    Dim retVal As Object

    Set retVal = Nothing
    Set objShell = CreateObject("Shell.Application")
    Set objShellWindows = objShell.Windows

    For Each o In objShellWindows
        sURL = ""
        On Error Resume Next  'because may not have a "document" property
        'Check the URL and if it's the one you want then
        ' assign the window object to the return value and exit the loop
        sURL = o.document.Location
        On Error GoTo 0
        If sURL Like sLocation & "*" Then
            Set retVal = o
            Exit For
        End If
    Next o

    Set GetIE = retVal

End Function

1) 我认为我们需要更清楚地了解您想要实现的目标2)为什么您需要在不同的选项卡中实现这一点?3) 在接下来的几行中删除那些错误,然后查看您得到的信息,这些信息可能会说明为什么在某些情况下querySelector没有导致插入值。“X在IE上工作不好…”听起来是正确的PI同意QHarr提出的建议。是否需要打开多个选项卡?如果没有,您可以在完成特定网页的处理后,尝试在同一选项卡中打开不同的网页。通过这种方式,您将不会遇到与选项卡相关的问题。4)使用适当的页面加载等待(即ie繁忙或ie ReadyState 4:DoEvents:Wend)替换所有这些Do循环。不要在这些线路上重复,因为它要么符合条件,要么不符合条件。如果没有,那么你可能需要考虑一个定时循环,而不是一个不同类型的DO循环/重复同样的循环结构。首先我真的很感谢你的帮助。如果我在课文中用错误的方式表达自己,我很抱歉。我现在会尽力的@谢谢,伙计。我在公司做了一个试点,有将近500人在windows上打开。几乎每个人都要这些标签。该计划的目的是选择我们因法规而必须执行的重复过程。根据他们的要求,在选项卡中打开可以提高生产力和组织性。他们需要打印所有网页的pdf,在标签页中打开允许公司使用一个应用程序(公司唯一允许的一个)加入大量pdf,只在标签页1)我认为我们需要更清楚地了解您试图实现的目标2)为什么需要在不同的标签页中这样做?3) 在接下来的几行中删除那些错误,然后查看您得到的信息,这些信息可能会说明为什么在某些情况下querySelector没有导致插入值。“X在IE上工作不好…”听起来是正确的PI同意QHarr提出的建议。是否需要打开多个选项卡?如果没有,您可以在完成特定网页的处理后,尝试在同一选项卡中打开不同的网页。通过这种方式,您将不会遇到与选项卡相关的问题。4)使用适当的页面加载等待(即ie繁忙或ie ReadyState 4:DoEvents:Wend)替换所有这些Do循环。不要在这些线路上重复,因为它要么符合条件,要么不符合条件。如果没有,那么你可能需要考虑一个定时循环,而不是一个不同类型的DO循环/重复同样的循环结构。首先我真的很感谢你的帮助。如果我在课文中用错误的方式表达自己,我很抱歉。我现在会尽力的@谢谢,伙计。我在公司做了一个试点,有将近500人在windows上打开。几乎每个人都要这些标签。该计划的目的是选择我们因法规而必须执行的重复过程。根据他们的要求,在选项卡中打开可以提高生产力和组织性。他们还需要打印所有网页的pdf,在标签页中打开允许公司使用一个应用程序(公司唯一允许的一个)加入大量pdf的标签页