2

我有一个 Excel VBA 宏

  1. 打开IE,
  2. 导航到医疗保险网站,
  3. 让我登录,
  4. 将网站上列出的声明与工作簿中已有的声明进行比较
  5. 提醒我任何差异

正是在登录步骤中我遇到了问题,所以我复制了下面的那部分代码。一旦.click执行该行,就会出现一个弹出窗口,要求用户单击OK按钮以继续。宏执行被暂停,直到我手动单击OK 弹出窗口上的按钮。

http://www.mymedicare.gov网页背后的源代码包含与弹出窗口相关的信息,但我一直无法弄清楚如何使用它,以便我可以以编程方式单击弹出OK按钮.

在弄清楚如何以编程方式单击弹出窗口OK按钮方面的任何帮助将不胜感激。

注意:对于这个问题,可以使用任何用户 ID 和密码。如果您处理弹出窗口,您将被传递到一个显示错误用户 ID/密码之类的页面。

这将表明您已成功处理弹出窗口。

Sub Medicare_Claims()' 
' Update the status bar 
  Application.StatusBar = "Running the Medicare Claims subroutine" 

' Open the "MyMedicare web page 
    Set ie = CreateObject("InternetExplorer.Application") 
    With ie 
        .Visible = True 
        .Navigate "https://www.mymedicare.gov/" 
    End With 

' Loop until the page is fully loaded 
    Do Until ie.ReadyState = 4 And Not ie.Busy 
        DoEvents 
    Loop 
    
' Log-in 
    ie.Document.all.Item("ctl00_ContentPlaceHolder1_ctl00_HomePage_SWEUserName").Value = "abcde"           
    ie.Document.all.Item("ctl00_ContentPlaceHolder1_ctl00_HomePage_SWEPassword").Value = "12345"     
    ie.Document.getElementById("ctl00_ContentPlaceHolder1_ctl00_HomePage_SignIn").Click
     
' Loop until the page is fully loaded 
    Do Until ie.ReadyState = 4 And Not ie.Busy 
        DoEvents 
    Loop 

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

' Navigate further to the Search Claims" web page 
    ie.Navigate "https://www.mymedicare.gov/searchclaims.aspx" 
4

2 回答 2

1

如果有人再次通过这种方式,这是 Tim Williams 提供的解决方案:

'Log-in 

ie.Document.all.Item"ctl00_ContentPlaceHolder1_ctl00_HomePage_SWEUserName").Value= "abcde"

ie.Document.all.Item("ctl00_ContentPlaceHolder1_ctl00_HomePage_SWEPassword").Value = "12345"

Dim f As String

f = "function(SignIn){document.getElementById'ctl00_ContentPlaceHolder1_ctl00_HomePage_Agree').value = 'True';}"

ie.Document.parentWindow.execScript "window.ConfirmationPopup = " & f, "jscript"

ie.Document.getElementById("ctl00_ContentPlaceHolder1_ctl00_HomePage_SignIn").Click
于 2013-11-28T18:55:46.903 回答
1

尝试使用Application.SendKeys "{ENTER}", True您的登录代码。

此外,请尝试添加 Do: DoEvents: Loop Until Not objIE.Busy以及 Do While objIE.readyState <> 4: DoEvents: Loop任何时候需要加载页面。以我的经验,将两者结合在一起效果很好,而仅使用其中一个有时会产生错误,并且使用Application.Wait会不必要地减慢您的代码速度。

于 2013-07-22T01:09:13.757 回答