【问题标题】:Excel VBA Loops & For each (by row)Excel VBA循环和每个(按行)
【发布时间】:2018-04-05 22:17:08
【问题描述】:

我目前正在构建一个 Web Scraper,以使用 Excel VBA 和 Selenium Web 驱动程序检查患者的资格。我被困在试图弄清楚如何引用我的数据集中的每一行。目前我可以引用我的数据的第一行,但不能引用下一行: User Input Output Dataset

代码如下:

Sub WebScraper()
Dim driver As New IEDriver
Dim sh As Worksheet
Dim rw As Range
Dim i As Integer
i = 2
website = Elig_Check_Form.Website_CBX.Text
UserName = Elig_Check_Form.Username_TXT.Text
Password = Elig_Check_Form.Password_TXT.Text
LName = Sheets(1).Cells(i, 3).Value
FName = Sheets(1).Cells(i, 2).Value
DOB = Format(Sheets(1).Cells(i, 4).Value, "MM/DD/YYYY") 
DOS = Format(Sheets(1).Cells(i, 5).Value, "MM/DD/YYYY")
EligStart = Sheets(1).Cells(i, 8).Value 
EligEnd = Sheets(1).Cells(i, 9).Value
EligStat = Sheets(1).Cells(i, 7).Value
WebsiteURL = "https://healthid.optum.com/tb/app/index.html?TARGET=https%3A2F%2Fprovider-linkhealth.unitedhealthcareonline.com%2Fb2c%2FLoginAction.do3Ftype%3DTmV0c2NhcGUjNS4wIChXaW5kb3dzIE5UIDYuMTsgV09XNjQ7IFRyaWRlbnQvNy4wOyBTTENDMjsgLk5FVCBDTFIgMi4wLjUwNzI3OyAuTkVUIENMUiAzLjUuMzA3Mjk7IC5ORVQgQ0xSIDMuMC4zMDcyOTsgLk5FVDQuMEM7IC5ORVQ0LjBFOyBydjoxMS4wKSBsaWtlIEdlY2tvI2ZhbHNlIzEx&relyingAppId=UHO60026#/login"
driver.Get WebsiteURL
driver.Window.Maximize
driver.FindElementById("userNameId_input").SendKeys (UserName) 'Reads Username
driver.FindElementById("passwdId_input").SendKeys (Password) 'Reads password
driver.FindElementById("SignIn").Click
Application.Wait (Now + TimeValue("0:00:10"))
On Error GoTo PasswordErr
driver.FindElementByXPath("//*[@id='app']/div/div[1]/div[2]/div[2]/div[5]/div[7]/div/a").Click

On Error Resume Next
driver.FindElementByName("AGREE").Click
'On Error GoTo 0
driver.FindElementByXPath("//*[@id='app']/div/div[1]/div[2]/div[2]/div[5]/div[12]/div/a/div/h3").Click
Application.Wait (Now + TimeValue("0:00:05"))
driver.FindElementByName("save").Click
 On Error GoTo ChooseProvider

'Do Until IsEmpty(Cells(iFib, 1))
 Do While i < 1000 And Format(LName) <> vbNullString
 Set sh = ActiveSheet
 For Each rw In sh.Rows


 driver.FindElementById("NameDateOfBirth-searchoptions").Click
 driver.FindElementById("last-name-[0]").SendKeys (LName) 
 driver.FindElementById("first-name-[0]").SendKeys (FName)
 driver.FindElementById("date-of-birth-[0]").SendKeys (DOB)
 driver.FindElementById("service-start-[0]").SendKeys (DOS)
 driver.FindElementById("search-button").Click
 Application.Wait (Now + TimeValue("0:00:05"))
 On Error GoTo NotFound
 Sheets(1).Cells(i, 12).Value = driver.FindElementByXPath("//*[@id='patient-     provider-information-section']/div/div/div[1]/div[1]/div/div[2]/div[1]/div/div/div[2]/div[1]/p").Text
 Sheets(1).Cells(i, 11).Value = driver.FindElementByXPath("//*[@id='patient-provider-information-section']/div/div/div[1]/div[1]/div/div[2]/div[1]/div/div/div[1]/div/div/span/span[1]/h3").Text
 Sheets(1).Cells(i, 10).Value = driver.FindElementByXPath("//*[@id='insurance-information-section']/div/div[1]/div/div[1]/div/div/div[1]/div/p").Text
 Sheets(1).Cells(i, 8).Value = Left(driver.FindElementByXPath("//*[@id='insurance-information-section']/div/div[1]/div/div[1]/div/div/div[1]/div/p").Text, 10)
 Sheets(1).Cells(i, 9).Value = Right(driver.FindElementByXPath("//*[@id='insurance-information-section']/div/div[1]/div/div[1]/div/div/div[1]/div/p").Text, 10)
 If Sheets(1).Cells(i, 5).Value >= Sheets(1).Cells(i, 8).Value Or Sheets(1).Cells(i, 5).Value < Sheets(1).Cells(i, 9).Value Then
 Sheets(1).Cells(i, 7).Value = "Eligible"
 Else: Sheets(1).Cells(i, 7).Value = "Not Eligible"


 Exit For

 End If
 driver.FindElementByXPath("//*[@id='ng-app']/div[3]/div/div/div/div/div/div/div/div/div[1]/div[1]/div/div/div/div[2]/ul/li[1]/span").Click
 i = i + 1


 Next rw
 Loop

【问题讨论】:

    标签: excel vba for-loop foreach


    【解决方案1】:

    需要在do while语句之后移动以下变量

     LName = Sheets(1).Cells(i, 3).Value
     FName = Sheets(1).Cells(i, 2).Value
     DOB = Format(Sheets(1).Cells(i, 4).Value, "MM/DD/YYYY") 
     DOS = Format(Sheets(1).Cells(i, 5).Value, "MM/DD/YYYY")
     EligStart = Sheets(1).Cells(i, 8).Value 
     EligEnd = Sheets(1).Cells(i, 9).Value
     EligStat = Sheets(1).Cells(i, 7).Value
     i = 2
    

    我还使用了 For 循环而不是 do while 循环。如果需要,我可以发布整个代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      • 2014-03-22
      • 2013-08-07
      • 2016-02-26
      • 2021-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多