Automatiser Internet Explorer (IE) ved hjelp av VBA

Denne siden inneholder kodeeksempler for automatisering av Internet Explorer (IE) ved bruk av VBA.

** Oppdatering 7/7/2019: For tiden er den beste måten å oppnå webautomatisering med VBA ved å bruke Selenium. Denne artikkelen dekker IKKE selen. Eksemplene nedenfor fungerer, og kan være tilstrekkelig for dine behov. Men hvis du har mer avanserte behov eller ønsker å bli ekspert på nettautomatisering, anbefaler jeg på det sterkeste å bruke Selenium i stedet. Dan Strongs kurs om webautomatisering (rabatt tilgjengelig via denne lenken) er en fantastisk ressurs for å lære selen:

(Jeg mottar en tilknyttet kommisjon fra Dans kurs)

Naviger til en webside med VBA

Den første koden åpner IE og navigerer til et nettsted. Den andre koden åpner IE, navigerer til et nettsted og samhandler med en inndataboks.

12345678910111213141516171819202122232425262728293031323334353637 Sub Automate_IE_Load_Page ()'Dette vil laste inn en webside i IEDim i As LongDim URL som strengDim IE som objektDim objElement As ObjectDim objCollection As Object'Lag InternetExplorer ObjectSett IE = CreateObject ("InternetExplorer.Application")'Set IE.Visible = True for å gjøre IE synlig, eller False for IE å kjøre i bakgrunnenIE.Visible = True'Definer URLURL = "https://www.automateexcel.com/excel/"'Naviger til URLIE.Navig URL'Statuslinje lar brukeren vite at nettstedet lastesApplication.StatusBar = URL & "lastes. Vennligst vent …"'Vent mens IE laster inn …' IE ReadyState = 4 betyr at nettsiden er lastet inn (den første sløyfen er satt til å unngå at den andre sløyfen utilsiktet hopper over)Do While IE.ReadyState = 4: DoEvents: Loop 'Do WhileGjør inntil IE.ReadyState = 4: DoEvents: Loop 'Gjør til'Nettside lastet innApplication.StatusBar = URL & "Lastet"'Last ut IESett IE = ingentingSett objElement = IngentingSett objCollection = IngentingSlutt Sub

Et veldig vanlig problem som folk støter på når de jobber med IE i VBA, er at VBA prøver å kjøre kode før Internet Explorer er fullstendig lastet. Ved å bruke denne koden, forteller du VBA å gjenta en sløyfe til IE er klar (IE.ReadyState - 4).

1234 'Vent mens IE laster inn …' IE ReadyState = 4 betyr at nettsiden er lastet inn (den første sløyfen er satt til å unngå at den andre sløyfen utilsiktet hopper over)Do While IE.ReadyState = 4: DoEvents: Loop 'Do WhileGjør inntil IE.ReadyState = 4: DoEvents: Loop 'Gjør til

Legg også merke til denne kodelinjen:

1 IE.Visible = TRUE

Denne koden bytter om IE kjører i bakgrunnen eller i forgrunnen.

Åpne URL og skriv inn data i skjema ved hjelp av VBA

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 'Dette må gå øverst i modulen din. Den brukes til å angi IE som det aktive vinduetOffentlig erklære funksjon SetForegroundWindow Lib "user32" (ByVal HWND så lenge) Så lengeSub Automate_IE_Enter_Data ()'Dette vil laste inn en webside i IEDim i As LongDim URL som strengDim IE som objektDim objElement As ObjectDim objCollection As ObjectDim HWNDSrc så lenge'Lag InternetExplorer ObjectSett IE = CreateObject ("InternetExplorer.Application")'Set IE.Visible = True for å gjøre IE synlig, eller False for IE å kjøre i bakgrunnenIE.Visible = True'Definer URLURL = "https://www.automateexcel.com/vba"'Naviger til URLIE.Navig URL'Statuslinje lar brukeren vite at nettstedet lastesApplication.StatusBar = URL & "lastes. Vennligst vent …"'Vent mens IE laster inn …' IE ReadyState = 4 betyr at nettsiden er lastet inn (den første sløyfen er satt til å unngå å hoppe over den andre løkken utilsiktet)Do While IE.ReadyState = 4: DoEvents: LoopGjør inntil IE.ReadyState = 4: DoEvents: Loop'Nettside lastet innApplication.StatusBar = URL & "Lastet"'Få vindu -ID for IE, slik at vi kan sette det som aktiveringsvinduHWNDSrc = IE.HWND'Sett IE som aktivt vinduSetForegroundWindow HWNDSrc'Finn og fyll ut inndataboksn = 0For hver itm I IE.document.allHvis itm = "[object HTMLInputElement]" Dan = n + 1Hvis n = 3 Daitm.Value = "orksheet"itm.Focus 'Aktiverer Inndataboksen (får markøren til å vises)Application.SendKeys "{w}", True 'Simulerer et' W 'tastetrykk. True forteller VBA å vente'til tastetrykket er ferdig før du fortsetter, slik at du kan'javascript på siden for å kjøre og filtrere tabellenGoTo endmacroSlutt omSlutt omNeste'Last ut IEendemakro:Sett IE = ingentingSett objElement = IngentingSett objCollection = IngentingSlutt Sub

GetElement i IE ved hjelp av VBA

Interaksjon med objekter i Internet Explorer kan ofte være smertefullt. Du må identifisere hvilket spesifikt objekt du skal jobbe med. I koden ovenfor ser vi etter den tredje forekomsten av "[object HTMLInputElement]" (et inndataskjema). Deretter skriver vi inn "orksheet" i inndataskjemaet (itm.value = "orksheet"), flytter markøren inn i input -skjemaet (itm.focus) og skriver "w". Å skrive "w" er nødvendig i dette tilfellet for å aktivere javascriptet som brukes til å filtrere tabellen.

Det er flere direkte metoder for å velge objekter, men denne metoden burde fungere hvis alt annet mislykkes.

For å bruke de andre metodene vil du bruke følgende alternativer:

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

Du kan få problemer når du bruker disse metodene hvis det er mer enn ett element med samme navn. Ved å bruke en sløyfe (som i eksempelkoden ovenfor), kan du angi hvilken forekomst av elementet som skal brukes.

Samhandle med IE ved hjelp av VBA

I koden ovenfor bruker vi hendelsen: Fokus (itm.focus) for å aktivere markøren i skjemaet.

Du finner flere eksempler på objekt-/elementhendelser, metoder og egenskaper her: https://msdn.microsoft.com/en-us/library/ms535893(v=vs.85).aspx

Ikke alle disse vil fungere med hvert objekt / element, og det kan være ganske mye prøving og feiling når du samhandler med objekter i IE.

Sendnøkler til Internet Explorer

Vi brukte Sendkeys -kommandoen i koden ovenfor:

1 Application.SendKeys "{w}", True

Sendkeys bør vanligvis være en siste utvei. Du bør vanligvis kunne samhandle med objekter direkte, men noen ganger er det lettere å bare bruke Sendkeys -kommandoen. Sendkeys er i hovedsak det samme som å skrive med tastaturet. Du må kontrollere at de riktige vinduene og objektene er valgt før du fortsetter. Sendkeys kan også utløse hendelser som kjøres basert på brukerinteraksjon på nettet. I eksemplet ovenfor bruker vi Sendkeys til å aktivere Javascript -filteret i tabellen som vi bruker på nettsiden.

Sendkeys har to innganger:
1. nøkkelen du vil angi (vanligvis omgitt av {}… {enter}, {q}….)
2. Vent til Sendkeys er fullført før du fortsetter TRUE/FALSE. Du vil vanligvis at dette settet skal være TRUE når du arbeider med Internet Explorer.

Kjør Internet Explorer i bakgrunnen

For å kjøre Internet Explorer i bakgrunnen må du gjøre to ting:

1. Ring makroen som inneholder IE -koden med Application.Run, slik at makroen kjører i bakgrunnen mens du fortsetter å jobbe:

1 Application.Run ("Automate_IE_Load_Page")

Merk: Denne koden kan potensielt avbryte arbeidet ditt, eller arbeidet ditt kan forstyrre koden. For eksempel, hvis du bruker SendKeys, kan Sendkeys sende et tastetrykk til feil applikasjon. Vær veldig forsiktig med dette.
2. Skjul IE:

1 IE.Visible = Falsk

Selen og VBA

Hvis du syntes denne artikkelen var nyttig, kan det være lurt å sjekke Dan Strongs kurs om webautomatisering. Den dekker hvordan du bruker selen med VBA.

(Jeg mottar en tilknyttet kommisjon fra Dans kurs)

Vitnesbyrd fra en av Dans studenter

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

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave