Automatiseer Internet Explorer (IE) met VBA

Deze pagina bevat coderingsvoorbeelden voor het automatiseren van Internet Explorer (IE) met VBA.

** Update 7-6-2019: Momenteel is de beste manier om webautomatisering met VBA te bereiken, door Selenium te gebruiken. Dit artikel dekt GEEN Selenium. De onderstaande voorbeelden werken en zijn mogelijk voldoende voor uw behoeften. Als u echter meer geavanceerde behoeften heeft of een expert wilt worden met webautomatisering, raad ik u ten zeerste aan om Selenium te gebruiken. De cursus van Dan Strong over webautomatisering (korting beschikbaar via deze link) is een fantastische bron om Selenium te leren:

(Ik ontvang een Affiliate Commissie van Dan's cursus)

Navigeer naar een webpagina met VBA

Het eerste stukje code opent IE en navigeert naar een website. Het tweede stuk code opent IE, navigeert naar een website en communiceert met een invoervak.

12345678910111213141516171819202122232425262728293031323334353637 Sub Automate_IE_Load_Page()'Hiermee wordt een webpagina in IE geladenDim ik zo langURL dimmen als stringIE dimmen als objectDim objectElement As ObjectDim objectverzameling als object'InternetExplorer-object maken'Stel IE = CreateObject ("InternetExplorer.Application") in'Stel IE.Visible = True in om IE zichtbaar te maken, of False voor IE om op de achtergrond te draaienIE.Zichtbaar = True'Definieer URL'URL = "https://www.automateexcel.com/excel/"'Navigeer naar URL'IE.Navigeer naar URL' Statusbalk laat de gebruiker weten dat de website wordt geladenApplication.StatusBar = URL & " wordt geladen. Even geduld aub… "' Wacht terwijl IE wordt geladen … 'IE ReadyState = 4 betekent dat de webpagina is geladen (de eerste lus is ingesteld om te voorkomen dat de tweede lus per ongeluk wordt overgeslagen)Do While IE.ReadyState = 4: DoEvents: Loop 'Do While'Doen tot IE.ReadyState = 4: DoEvents: Loop 'Do Until''Webpagina geladen'Application.StatusBar = URL & "Geladen"'Ontladen IE'Stel IE = Niets inStel objElement = Niets inStel objCollection = Niets inEinde sub

Een veel voorkomend probleem dat mensen tegenkomen bij het werken met IE in VBA, is dat VBA probeert code uit te voeren voordat Internet Explorer volledig is geladen. Door deze code te gebruiken, vertel je VBA een lus te herhalen totdat IE klaar is (IE.ReadyState - 4).

1234 ' Wacht terwijl IE wordt geladen … 'IE ReadyState = 4 betekent dat de webpagina is geladen (de eerste lus is ingesteld om te voorkomen dat de tweede lus per ongeluk wordt overgeslagen)Do While IE.ReadyState = 4: DoEvents: Loop 'Do While'Doen tot IE.ReadyState = 4: DoEvents: Loop 'Do Until'

Let ook op deze regel code:

1 IE.Zichtbaar = WAAR

Deze code schakelt of IE op de achtergrond of op de voorgrond draait.

Open URL en voer gegevens in formulier in met VBA

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 'Dit moet bovenaan je module komen. Het wordt gebruikt om IE in te stellen als het actieve vensterPublic Declare-functie SetForegroundWindow Lib "user32" (ByVal HWND zo lang) zo langSub Automate_IE_Enter_Data()'Hiermee wordt een webpagina in IE geladenDim ik zo langURL dimmen als stringIE dimmen als objectDim objectElement As ObjectDim objectverzameling als objectDim HWNDSrc zo lang'InternetExplorer-object maken'Stel IE = CreateObject ("InternetExplorer.Application") in'Stel IE.Visible = True in om IE zichtbaar te maken, of False voor IE om op de achtergrond te draaienIE.Zichtbaar = True'Definieer URL'URL = "https://www.automateexcel.com/vba"'Navigeer naar URL'IE.Navigeer naar URL' Statusbalk laat de gebruiker weten dat de website wordt geladenApplication.StatusBar = URL & " wordt geladen. Even geduld aub… "' Wacht terwijl IE wordt geladen … 'IE ReadyState = 4 betekent dat de webpagina is geladen (de eerste lus is ingesteld om te voorkomen dat de tweede lus per ongeluk wordt overgeslagen)Do While IE.ReadyState = 4: DoEvents: LoopDoen tot IE.ReadyState = 4: DoEvents: Loop'Webpagina geladen'Application.StatusBar = URL & "Geladen"'Verkrijg Window ID voor IE zodat we het kunnen instellen als activeervenster'HWNDSrc = IE.HWND'Stel IE in als actief venster'SetForegroundWindow HWNDSrc'Invoervak ​​zoeken en invullen'n = 0Voor elk item In IE.document.allIf itm = "[object HTMLInputElement]" Dann = n + 1Als n = 3 Danitm.Value = "orkblad"itm.Focus 'Activeert het invoervak ​​(laat de cursor verschijnen)Application.SendKeys "{w}", True 'simuleert een 'W' toetsaanslag. True vertelt VBA te wachten'totdat de toetsaanslag is afgelopen voordat u verder gaat, waardoor'javascript op pagina om de tabel uit te voeren en te filteren'Ga naar endmacroStop alsStop alsVolgende'Ontladen IE'endmacro:Stel IE = Niets inStel objElement = Niets inStel objCollection = Niets inEinde sub

GetElement in IE met VBA

Interactie met objecten in Internet Explorer kan vaak lastig zijn. U moet bepalen met welk specifiek object u wilt werken. In de bovenstaande code zoeken we naar het derde exemplaar van "[object HTMLInputElement]" (een invoerformulier). Vervolgens voeren we "orksheet" in het invoerformulier in (itm.value = "orksheet"), verplaatsen de cursor naar het invoerformulier (itm.focus) en typen "w". Het typen van "w" is in dit geval nodig om het javascript te activeren dat wordt gebruikt om de tabel te filteren.

Er zijn meer directe methoden om objecten te selecteren, maar deze methode zou moeten werken als al het andere faalt.

Om die andere methoden te gebruiken, wilt u de volgende opties gebruiken:

1234 IE.document.getelementbyid("ID").value = "waarde" 'Zoeken op IDIE.document.getelementsbytagname("ID").value = "value" 'Zoeken op tagIE.document.getelementsbyclassname("ID").value = "value" 'Zoeken op klasseIE.document.getelementsbyname("ID").value = "waarde" 'Zoeken op naam

U kunt problemen tegenkomen bij het gebruik van deze methoden als er meer dan één element met dezelfde naam is. Door een lus te gebruiken (zoals in de voorbeeldcode hierboven), kunt u specificeren welke instantie van het element moet worden gebruikt.

Interactie met IE met behulp van VBA

In de bovenstaande code gebruiken we de gebeurtenis: Focus (itm.focus) om de cursor in het formulier te activeren.

U kunt hier meer voorbeelden van object-/elementgebeurtenissen, methoden en eigenschappen vinden: https://msdn.microsoft.com/en-us/library/ms535893(v=vs.85).aspx

Niet al deze werken met elk object / element en er kan nogal wat vallen en opstaan ​​​​zijn bij interactie met objecten in IE.

Verzendsleutels naar Internet Explorer

We gebruikten de opdracht Sendkeys in de bovenstaande code:

1 Toepassing.SendKeys "{w}", True

Sendkeys zouden over het algemeen een laatste redmiddel moeten zijn. Normaal gesproken zou u rechtstreeks met objecten moeten kunnen communiceren, maar soms is het eenvoudiger om gewoon de opdracht Sendkeys te gebruiken. Sendkeys is in wezen hetzelfde als typen met het toetsenbord. U moet ervoor zorgen dat de juiste vensters en objecten worden geselecteerd voordat u doorgaat. Sendkeys kunnen ook gebeurtenissen activeren die worden uitgevoerd op basis van gebruikersinteractie op internet. In het bovenstaande voorbeeld gebruiken we Sendkeys om het Javascript-filter te activeren in de tabel die we op de webpagina gebruiken.

Sendkeys heeft twee ingangen:
1. de sleutel om in te voeren (meestal omgeven door {}… {enter}, {q}… .)
2. Wacht tot Sendkeys is voltooid voordat u doorgaat met TRUE/FALSE. Over het algemeen wilt u deze instelling op TRUE instellen wanneer u met Internet Explorer werkt.

Internet Explorer op de achtergrond uitvoeren

Om Internet Explorer op de achtergrond uit te voeren, moet u twee dingen doen:

1. Roep de macro met de IE-code aan met Application.Run zodat de macro op de achtergrond wordt uitgevoerd terwijl u doorgaat met werken:

1 Application.Run ("Automate_IE_Load_Page")

Opmerking: deze code kan mogelijk uw werk onderbreken, of uw werk kan de code verstoren. Als u bijvoorbeeld SendKeys gebruikt, kan Sendkeys een toetsaanslag naar de verkeerde toepassing sturen. Wees hier heel voorzichtig mee.
2. Verberg IE:

1 IE.Zichtbaar = False

Selenium & VBA

Als je dit artikel nuttig vond, wil je misschien de cursus van Dan Strong over webautomatisering bekijken. Het behandelt het gebruik van Selenium met VBA.

(Ik ontvang een Affiliate Commissie van Dan's cursus)

Getuigenis van een van Dans studenten

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

U zal helpen de ontwikkeling van de site, het delen van de pagina met je vrienden

wave wave wave wave wave