Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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-如果站点已登录IE,则跳过登录页_Excel_Vba - Fatal编程技术网

Excel VBA-如果站点已登录IE,则跳过登录页

Excel VBA-如果站点已登录IE,则跳过登录页,excel,vba,Excel,Vba,我是StackOverflow的新手,实际上搜索过这个主题,但还没有找到任何东西 如果IE是第一次用代码打开,那么我的代码就没有问题,我的站点会询问登录凭据,我的宏会填充它。但是,如果网站已经打开并登录到系统中,我的宏将崩溃。这就是为什么我想跳过这个阶段,如果已知ID不在网页中 我在这个网站上看到了一个解决方案,但它对我不起作用。这里是链接 链接上的代码如下所示 Dim myElem as Object Set myElem = IE.document.getElementById("ctl0

我是StackOverflow的新手,实际上搜索过这个主题,但还没有找到任何东西

如果IE是第一次用代码打开,那么我的代码就没有问题,我的站点会询问登录凭据,我的宏会填充它。但是,如果网站已经打开并登录到系统中,我的宏将崩溃。这就是为什么我想跳过这个阶段,如果已知ID不在网页中

我在这个网站上看到了一个解决方案,但它对我不起作用。这里是链接

链接上的代码如下所示

Dim myElem as Object
Set myElem = IE.document.getElementById("ctl05_TextBoxSCN")
If myElem Is Nothing Then
    'element not found
Else
    'element found
End If
我正在为Set myElem=ie.document.getElementById(“xxx”)节获取对象必需的错误。并且站点未登录。但若站点已经登录,宏将正常工作

若我清除了以上步骤,那个么这个宏此时只适用于新的ie页面,若登录到另一个ie页面,那个么它将正常工作。谢谢你的帮助

Public Sub MakeSelection()
    Dim ie As New InternetExplorer

    With ie
        .Visible = True
        .navigate "https://sample.com"

        While .Busy Or .readyState < 4: DoEvents: Wend
Dim myElem As Object
Set myElem = ie.document.getElementById("xxx")
If myElem Is Nothing Then
  With .document
  .getElementById("UserName").Focus
  .getElementById("UserName").Value = Sheets("LoginData").Range("B1").Text
  .getElementById("Password").Focus
  .getElementById("Password").Value = Sheets("LoginData").Range("B2").Text
  .getElementById("LoginButton").Click
  End With

  Else
Public-Sub-MakeSelection()
Dim ie成为新的InternetExplorer
与ie
.Visible=True
.导航“https://sample.com"
当.Busy或.readyState<4:DoEvents:Wend时
以暗髓鞘为对象
设置myElem=ie.document.getElementById(“xxx”)
如果迈勒姆什么都不是
随附.文件
.getElementById(“用户名”).Focus
.getElementById(“用户名”).Value=工作表(“登录数据”).Range(“B1”).Text
.getElementById(“密码”).Focus
.getElementById(“密码”).Value=Sheets(“登录数据”).Range(“B2”).Text
.getElementById(“登录按钮”)。单击
以
其他的

我添加了如果要在登录页面后打开的页面中查找单词,检查站点是否已打开,或者仍然询问密码和用户名

这是代码

    Dim ie As New InternetExplorer
    Dim myElem As Variant
        ie.Visible = True
        ie.navigate "https://test.htm"
        While ie.Busy Or ie.readyState < 4: DoEvents: Wend
'newpage a word exist inside first page after password
        myElem = ie.document.getElementById("newpage")
        If IsNull(ie.document.getElementById("newpage")) Then
            ie.document.getElementById("UserName").Focus
            ie.document.getElementById("UserName").Value = Sheets("LoginData").Range("B1").Text
            ie.document.getElementById("Password").Focus
            ie.document.getElementById("Password").Value = Sheets("LoginData").Range("B2").Text
            ie.document.getElementById("LoginButton").Click
            End If
Dim ie成为新的InternetExplorer
作为变异体的暗髓鞘
可见=真实
即“导航”https://test.htm"
当ie.Busy或ie.readyState<4:DoEvents:Wend时
'新页面密码后的第一页中存在一个单词
myElem=ie.document.getElementById(“newpage”)
如果IsNull(即document.getElementById(“newpage”)),则
ie.document.getElementById(“用户名”).Focus
ie.document.getElementById(“用户名”).Value=Sheets(“LoginData”).Range(“B1”).Text
ie.document.getElementById(“密码”).Focus
ie.document.getElementById(“密码”).Value=Sheets(“登录数据”).Range(“B2”).Text
ie.document.getElementById(“登录按钮”)。单击
如果结束

是否在任何地方声明和分配了
IE
?如果未声明或分配
IE
,您将获得“所需对象”。我已将其
Dim IE分配为新的InternetExplorer
,我们无法从您发布的代码中猜到这一点。请在您的问题中包含足够的代码以可靠地再现问题,请参阅。感谢您的编辑。你在一个带有ie的
块中-你想
设置myElem=.document…
侧注,你想使用一个使这些嵌套结构看起来嵌套;一致的缩进将大大提高代码的可读性。另一方面,我强烈建议不要将任何
声明为新的
,因为这会造成一个错误,而且这些声明可能会产生您不想处理的副作用。