Automatisera Internet Explorer (IE) med VBA

Denna sida innehåller kodningsexempel för automatisering av Internet Explorer (IE) med VBA.

** Uppdatering 7/7/2019: För närvarande är det bästa sättet att uppnå webbautomatisering med VBA genom att använda Selenium. Denna artikel täcker INTE selen. Exemplen nedan fungerar och kan vara tillräckliga för dina behov. Men om du har mer avancerade behov eller vill bli expert på webbautomatisering, rekommenderar jag starkt att du använder Selenium istället. Dan Strongs kurs om webbautomation (rabatt tillgänglig via denna länk) är en fantastisk resurs för att lära sig selen:

(Jag får en affiliatekommission från Dans kurs)

Navigera till en webbsida med VBA

Den första koden öppnar IE och navigerar till en webbplats. Den andra koden öppnar IE, navigerar till en webbplats och interagerar med en inmatningsruta.

12345678910111213141516171819202122232425262728293031323334353637 Sub Automate_IE_Load_Page ()'Detta kommer att ladda en webbsida i IEDim i As LongDim URL som strängDim IE som objektDim objElement As ObjectDim objCollection As Object'Skapa InternetExplorer -objektAnge IE = CreateObject ("InternetExplorer.Application")'Set IE.Visible = True för att göra IE synlig, eller Falskt för IE att köras i bakgrundenIE.Visible = True'Definiera webbadressURL = "https://www.automateexcel.com/excel/"'Navigera till URLIE.Navigate URL'Statusfält låter användaren veta att webbplatsen laddasApplication.StatusBar = URL & "laddas. Vänta …"'Vänta medan IE laddar …' IE ReadyState = 4 betyder att webbsidan har laddats (den första slingan är inställd för att undvika att oavsiktligt hoppa över den andra slingan)Do While IE.ReadyState = 4: DoEvents: Loop 'Do WhileGör tills IE.ReadyState = 4: DoEvents: Loop 'Gör tills'Webbsida laddadApplication.StatusBar = URL & "Loaded"'Ladda ur IEStäll in IE = ingentingAnge objElement = IngentingSet objCollection = IngentingAvsluta Sub

Ett mycket vanligt problem som människor stöter på när de arbetar med IE i VBA är att VBA försöker köra kod innan Internet Explorer har laddats helt. Genom att använda den här koden säger du till VBA att upprepa en loop tills IE är klar (IE.ReadyState - 4).

1234 'Vänta medan IE laddar …' IE ReadyState = 4 betyder att webbsidan har laddats (den första slingan är inställd för att undvika att oavsiktligt hoppa över den andra slingan)Do While IE.ReadyState = 4: DoEvents: Loop 'Do WhileGör tills IE.ReadyState = 4: DoEvents: Loop 'Gör tills

Observera också denna kodrad:

1 IE.Visible = TRUE

Denna kod växlar om IE körs i bakgrunden eller i förgrunden.

Öppna URL och ange data i formulär med hjälp av VBA

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 'Detta måste gå högst upp i din modul. Det används för att ställa in IE som det aktiva fönstretPublic Declare Function SetForegroundWindow Lib "user32" (ByVal HWND Så länge) Så längeSub Automate_IE_Enter_Data ()'Detta kommer att ladda en webbsida i IEDim i As LongDim URL som strängDim IE som objektDim objElement As ObjectDim objCollection As ObjectDim HWNDSrc så länge'Skapa InternetExplorer -objektAnge IE = CreateObject ("InternetExplorer.Application")'Set IE.Visible = True för att göra IE synlig, eller Falskt för IE att köras i bakgrundenIE.Visible = True'Definiera URLURL = "https://www.automateexcel.com/vba"'Navigera till URLIE.Navigate URL'Statusfält låter användaren veta att webbplatsen laddasApplication.StatusBar = URL & "laddas. Vänta …"'Vänta medan IE laddar …' IE ReadyState = 4 betyder att webbsidan har laddats (den första slingan är inställd för att undvika att oavsiktligt hoppa över den andra slingan)Gör medan IE.ReadyState = 4: DoEvents: LoopGör tills IE.ReadyState = 4: DoEvents: Loop'Webbsida laddadApplication.StatusBar = URL & "Loaded"'Skaffa fönster -ID för IE så att vi kan ställa in det som aktiveringsfönsterHWNDSrc = IE.HWND'Ställ in IE som aktivt fönsterSetForegroundWindow HWNDSrc'Hitta och fyll i inmatningsrutann = 0För varje it i IE.document.allOm itm = "[object HTMLInputElement]" Dån = n + 1Om n = 3 Dåitm.Value = "orksheet"itm.Focus 'Aktiverar inmatningsrutan (får markören att visas)Application.SendKeys "{w}", True 'Simulerar ett' W 'tangenttryckning. True säger till VBA att vänta'tills knapptryckningen är klar innan du fortsätter, vilket tillåter'javascript på sidan för att köra och filtrera tabellenGoTo endmacroAvsluta omAvsluta omNästa'Ladda ur IEslutmakro:Ställ in IE = ingentingAnge objElement = IngentingSet objCollection = IngentingAvsluta Sub

GetElement i IE med VBA

Att interagera med objekt i Internet Explorer kan ofta vara en smärta. Du måste identifiera vilket specifikt objekt du ska arbeta med. I koden ovan letar vi efter den tredje instansen av "[object HTMLInputElement]" (ett inmatningsformulär). Sedan skriver vi in ​​"orksheet" i inmatningsformuläret (itm.value = "orksheet"), flyttar markören till inmatningsformuläret (itm.focus) och skriver "w". Att skriva "w" är nödvändigt i det här fallet för att aktivera det javascript som används för att filtrera tabellen.

Det finns mer direkta metoder för att välja objekt, men den här metoden borde fungera om allt annat misslyckas.

För att använda de andra metoderna vill du använda följande alternativ:

1234 IE.document.getelementbyid ("ID"). Value = "value" 'Sök efter IDIE.document.getelementsbytagname ("ID"). Value = "value" 'Sök efter taggIE.document.getelementsbyclassname ("ID"). Value = "value" 'Hitta efter klassIE.document.getelementsbyname ("ID"). Value = "value" 'Sök efter namn

Du kan stöta på problem när du använder dessa metoder om det finns mer än ett element med samma namn. Genom att använda en loop (som i exempelkoden ovan) kan du ange vilken instans av elementet som ska användas.

Interagera med IE med VBA

I koden ovan använder vi händelsen: Fokus (itm.focus) för att aktivera markören i formuläret.

Du hittar fler exempel på objekt/elementhändelser, metoder och egenskaper här: https://msdn.microsoft.com/en-us/library/ms535893(v=vs.85).aspx

Alla dessa kommer inte att fungera med alla objekt / element och det kan finnas en hel del prövning och fel när man interagerar med objekt i IE.

Skicka nycklar till Internet Explorer

Vi använde kommandot Sendkeys i koden ovan:

1 Application.SendKeys "{w}", True

Sendkeys bör i allmänhet vara en sista utväg. Du bör vanligtvis kunna interagera med objekt direkt, men ibland är det lättare att bara använda kommandot Sendkeys. Sendkeys är i princip detsamma som att skriva med tangentbordet. Du måste se till att rätt fönster och objekt väljer innan du fortsätter. Sendkeys kan också utlösa händelser som körs baserat på användarinteraktion på webben. I exemplet ovan använder vi Sendkeys för att aktivera Javascript -filtret i tabellen som vi använder på webbsidan.

Sendkeys har två ingångar:
1. nyckeln att skriva in (vanligtvis omgiven av {}… {enter}, {q}….)
2. Vänta tills Sendkeys har slutförts innan du fortsätter TRUE/FALSE. Du kommer vanligtvis att vilja att denna uppsättning är SANN när du arbetar med Internet Explorer.

Kör Internet Explorer i bakgrunden

För att köra Internet Explorer i bakgrunden måste du göra två saker:

1. Ring makrot som innehåller IE -koden med Application.Run så att makrot körs i bakgrunden när du fortsätter att arbeta:

1 Application.Run ("Automate_IE_Load_Page")

Obs! Denna kod kan eventuellt avbryta ditt arbete, eller ditt arbete kan störa koden. Om du till exempel använder SendKeys kan Sendkeys skicka ett tangenttryck till fel applikation. Var mycket försiktig med detta.
2. Dölj IE:

1 IE.Visible = Falskt

Selen & VBA

Om du tyckte att den här artikeln var användbar kan du kolla in Dan Strongs kurs om webbautomation. Det täcker hur man använder selen med VBA.

(Jag får en affiliatekommission från Dans kurs)

Vittnesmål från en av Dans elever

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

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave