Automatiser Internet Explorer (IE) ved hjælp af VBA

Denne side indeholder kodeeksempler til automatisering af Internet Explorer (IE) ved hjælp af VBA.

** Opdatering 7/7/2019: I øjeblikket er den bedste måde at opnå webautomatisering med VBA ved at bruge Selenium. Denne artikel dækker IKKE selen. Eksemplerne herunder fungerer og er muligvis tilstrækkelige til dine behov. Men hvis du har mere avancerede behov eller ønsker at blive ekspert i webautomatisering, anbefaler jeg stærkt at bruge Selenium i stedet. Dan Strongs kursus om webautomatisering (rabat tilgængelig via dette link) er en fantastisk ressource til at lære selen:

(Jeg modtager en tilknyttet kommission fra Dan's kursus)

Naviger til en webside med VBA

Det første stykke kode åbner IE og navigerer til et websted. Det andet stykke kode åbner IE, navigerer til et websted og interagerer med en inputboks.

12345678910111213141516171819202122232425262728293031323334353637 Sub Automate_IE_Load_Page ()'Dette indlæser en webside i IEDim i så længeDim URL som strengDim IE som objektDim objElement As ObjectDim objCollection As Object'Opret InternetExplorer -objektIndstil IE = CreateObject ("InternetExplorer.Application")'Set IE.Visible = True for at gøre IE synlig, eller Falsk for IE at køre i baggrundenIE.Visible = True'Definer URLURL = "https://www.automateexcel.com/excel/"'Naviger til URLIE.Navig URL'Statuslinje lader brugeren vide, at webstedet indlæsesApplication.StatusBar = URL & "indlæses. Vent venligst …"'Vent, mens IE indlæses …' IE ReadyState = 4 betyder, at websiden er indlæst (den første loop er indstillet til at undgå utilsigtet at springe over den anden loop)Do While IE.ReadyState = 4: DoEvents: Loop 'Do WhileGør indtil IE.ReadyState = 4: DoEvents: Loop 'Gør indtil'Webside indlæstApplication.StatusBar = URL & "Indlæst"'Aflæs IEIndstil IE = IntetIndstil objElement = IntetIndstil objCollection = IntetAfslut Sub

Et meget almindeligt problem, folk støder på, når de arbejder med IE i VBA, er, at VBA forsøger at køre kode, før Internet Explorer er fuldt indlæst. Ved at bruge denne kode fortæller du VBA at gentage en loop, indtil IE er klar (IE.ReadyState - 4).

1234 'Vent, mens IE indlæses …' IE ReadyState = 4 betyder, at websiden er indlæst (den første sløjfe er indstillet til at undgå utilsigtet at springe over den anden sløjfe)Do While IE.ReadyState = 4: DoEvents: Loop 'Do WhileGør indtil IE.ReadyState = 4: DoEvents: Loop 'Gør indtil

Bemærk også denne kodelinje:

1 IE.Visible = TRUE

Denne kode skifter om IE kører i baggrunden eller i forgrunden.

Åbn URL og indtast data i form ved hjælp af VBA

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 'Dette skal stå øverst på dit modul. Det bruges til at indstille IE som det aktive vinduePublic Declare Function SetForegroundWindow Lib "user32" (ByVal HWND så længe) Så længeSub Automate_IE_Enter_Data ()'Dette indlæser en webside i IEDim i så længeDim URL som strengDim IE som objektDim objElement As ObjectDim objCollection As ObjectDim HWNDSrc så længe'Opret InternetExplorer -objektIndstil IE = CreateObject ("InternetExplorer.Application")'Set IE.Visible = True for at gøre IE synlig, eller Falsk for IE at køre i baggrundenIE.Visible = True'Definer URLURL = "https://www.automateexcel.com/vba"'Naviger til URLIE.Navig URL'Statuslinje lader brugeren vide, at webstedet indlæsesApplication.StatusBar = URL & "indlæses. Vent venligst …"'Vent, mens IE indlæses …' IE ReadyState = 4 betyder, at websiden er indlæst (den første loop er indstillet til at undgå utilsigtet at springe over den anden loop)Do While IE.ReadyState = 4: DoEvents: LoopGør indtil IE.ReadyState = 4: DoEvents: Loop'Webside indlæstApplication.StatusBar = URL & "Indlæst"'Få vindue -id til IE, så vi kan indstille det som aktiveringsvindueHWNDSrc = IE.HWND'Indstil IE som aktivt vindueSetForegroundWindow HWNDSrc'Find og udfyld inputboksn = 0For hver itm I IE.document.allHvis itm = "[object HTMLInputElement]" Sån = n + 1Hvis n = 3 Såitm.Value = "orksheet"itm.Focus 'Aktiverer inputboksen (får markøren til at vises)Application.SendKeys "{w}", True 'Simulerer et' W 'tastetryk. True fortæller VBA at vente'indtil tastetryk er afsluttet, før du fortsætter, hvilket tillader'javascript på siden for at køre og filtrere tabellenGoTo endmacroAfslut HvisAfslut HvisNæste'Aflæs IEendmakro:Indstil IE = IntetIndstil objElement = IntetIndstil objCollection = IntetAfslut Sub

GetElement i IE ved hjælp af VBA

Interaktion med objekter i Internet Explorer kan ofte være en smerte. Du skal identificere, hvilket specifikt objekt der skal arbejdes med. I ovenstående kode leder vi efter den tredje forekomst af "[object HTMLInputElement]" (en inputformular). Derefter indtaster vi "orksheet" i inputformularen (itm.value = "orksheet"), flytter markøren til inputformularen (itm.focus) og skriver "w". At skrive "w" er nødvendigt i dette tilfælde for at aktivere det javascript, der bruges til at filtrere tabellen.

Der er flere direkte metoder til at vælge objekter, men denne metode burde fungere, hvis alt andet fejler.

For at bruge de andre metoder vil du gerne bruge følgende muligheder:

1234 IE.document.getelementbyid ("ID"). Value = "value" 'Find efter IDIE.document.getelementsbytagname ("ID"). Value = "value" 'Find efter tagIE.document.getelementsbyclassname ("ID"). Value = "value" 'Find efter klasseIE.document.getelementsbyname ("ID"). Value = "value" 'Find med navn

Du kan støde på problemer, når du bruger disse metoder, hvis der er mere end et element med samme navn. Ved at bruge en loop (som i eksempelkoden ovenfor) kan du angive, hvilken forekomst af elementet der skal bruges.

Interagere med IE ved hjælp af VBA

I koden ovenfor bruger vi begivenheden: Fokus (itm.focus) for at aktivere markøren i formularen.

Du kan finde flere eksempler på objekt-/elementhændelser, metoder og egenskaber her: https://msdn.microsoft.com/en-us/library/ms535893(v=vs.85).aspx

Ikke alle disse vil fungere med hvert objekt / element, og der kan være en del prøvelse og fejl, når der interageres med objekter i IE.

Sendnøgler til Internet Explorer

Vi brugte Sendkeys -kommandoen i koden ovenfor:

1 Application.SendKeys "{w}", True

Sendkeys bør generelt være en sidste udvej. Du bør normalt være i stand til at interagere med objekter direkte, men nogle gange er det lettere at bare bruge kommandoen Sendkeys. Sendkeys er stort set det samme som at skrive med tastaturet. Du skal sikre dig, at de korrekte vinduer og objekter vælger, før du fortsætter. Sendkeys kan også udløse begivenheder, der kører baseret på brugerinteraktion på internettet. I eksemplet ovenfor bruger vi Sendkeys til at aktivere Javascript -filteret i tabellen, som vi bruger på websiden.

Sendkeys har to indgange:
1. nøglen til indtastning (generelt omgivet af {}… {enter}, {q}….)
2. Vent, indtil Sendkeys er afsluttet, før du fortsætter SAND/FALSK. Du vil generelt have dette sæt til SANDT, når du arbejder med Internet Explorer.

Kør Internet Explorer i baggrunden

For at køre Internet Explorer i baggrunden skal du gøre to ting:

1. Ring til makroen, der indeholder IE -koden med Application.Run, så makroen kører i baggrunden, mens du arbejder videre:

1 Application.Run ("Automate_IE_Load_Page")

Bemærk: Denne kode kan muligvis afbryde dit arbejde, eller dit arbejde kan forstyrre koden. Hvis du f.eks. Bruger SendKeys, sender Sendkeys muligvis et tastetryk til det forkerte program. Vær meget forsigtig med dette.
2. Skjul IE:

1 IE.Visible = Falsk

Selen & VBA

Hvis du fandt denne artikel nyttig, kan du prøve Dan Strongs kursus om webautomatisering. Det dækker hvordan man bruger selen med VBA.

(Jeg modtager en tilknyttet kommission fra Dan's kursus)

Vidnesbyrd fra en af ​​Dans elever

https://excelvbaisfun.com/wp-content/uploads/2019/06/dan_strong_complete_web_automation_course_review_VbFn2vwul8A_1080p.mp4

Du vil bidrage til udviklingen af ​​hjemmesiden, at dele siden med dine venner

wave wave wave wave wave