Hente Web Query data uten avbrudd

August 1  by Eliza

Nikolas har utviklet en web-spørring for å hente eksterne data på en jevnlig basis. Problemet er at han ofte får en "Kan ikke åpne web-siden ..." feilmelding når du kjører Web spørringen. Denne meldingen vises når det er noen avbrudd av Internett-tilkobling mellom Nikolas og webserveren, og han trenger å klikke OK på feilmeldingen slik at Excel vil fortsette.

Dette utgjør et problem når Nikolas er borte fra datamaskinen hans, fordi det kan bety at Web spørringen ikke samle alle data det skal være fordi det er tålmodig venter på OK-knappen for å bli klikket når den går inn i et problem. Nikolas ønsker en måte å fortelle nettspørring for å ikke vise meldingen og bare gå tilbake til å vente hvis det ikke kan tilkobling på gjeldende forsøk.

Dessverre er det ingen måte å fortelle Excel til å gjøre hva du vil. Når meldingen "Kan ikke åpne web-siden ..." vises, er det praktisk talt umulig å undertrykke meldingen. Den eneste løsningen er å prøve å lage en makro som fungerer rundt problemet. For eksempel kan du utvikle en makro som oppretter en forekomst av Internet Explorer (som ikke har problemet) for å teste for en feil når websiden. Den følgende makro implementerer denne tilnærming.

Option Explicit
'Erklærer Sleep API
Private Declare Sub Sleep Lib "kernel32" (ByVal nMilliseconds Som Long)

Funksjon GetData (strStartURL As String) As String
Dim Forsøk Som Long
Dim Koblet Som boolsk
Dim ieDocNew Som MSHTML.HTMLDocument

GetData = "N / A"
Forsøk = 0

prøve på nytt:
Forsøk = Forsøk + 1

Opprett leserens objektreferanser og åpne en IE vindu
Dim ieNew Som New Internetexplorer
'Load side
Med ieNew
.Visible = True 'utstillingsvindu
.navigate strStartURL 'åpen side
Mens Ikke .readyState = READYSTATE_COMPLETE
Sove 500 'vente 1/2 sek før du prøver igjen
Wend
Avslutt med

'Siden bør være åpen i IE, tid for parsing
Opprett Document Object Model referanser
Satt ieDocNew = ieNew.Document

Hvis ieDocNew.Scripts.Length = 13 _
Og ieNew.LocationName = "Microsoft Excel tips" _
Deretter
Koblet = True
GetData = "Data lykkes fanget"

'Dette er hvor du gjør noe med data
End If

"Rydd opp IE gjenstander
Satt ieDocNew = Nothing
ieNew.Quit
Satt ieNew = Nothing
DoEvents
Hvis Forsøk <10 og ikke koblet Deretter GoTo prøve på nytt
End Function

Merk at denne makroen krever litt konfigurasjon i VBA-grensesnittet for å fungere riktig. Nærmere bestemt, må du velge Referanser fra Verktøy-menyen, og sørge for at prosjektet inneholder referanser til Microsoft HTML Object Library og Microsoft Internet Controls.

Hva makroen gjør er å bruke IE for å koble til URL sendes til funksjonen (i strStartURL) og deretter ta tak i innhold som er funnet der. Hvis tilkoblingen er vellykket, så Connected er satt til Sann, og du kan analysere og bruke dataene på stedet. Funksjonen, som skrevet, går tilbake "Data lykkes fanget" til den som ringer rutine, men du kan like gjerne gå tilbake noen verdi grep fra det eksterne nettstedet. At verdien kan da bli fylt, men kall rutine, inn i et regneark.

Oppmerksom på, også, at funksjonen gjør noen rudimentære parsing på siden den fanger, og bare vurderer forbindelse vellykket hvis den finner noen forventet ordlyden i sidetittelen finnes på nettadressen.

For å få et inntrykk av hvordan makro fungerer, bruke noen makroer som følgende:

Sub TEST_GetData1 ()
MsgBox GetData ("http://excel.tips.net")
End Sub

Sub TEST_GetData2 ()
MsgBox GetData ("http://excel.tipsxx.net")
End Sub

Sub TEST_GetData3 ()
MsgBox GetData ("http://excel.tips.net/junk")
End Sub

Det første man bør jobbe; den andre to skal vise en melding som sier "N / A".

ExcelTips er din kilde for kostnadseffektiv Microsoft Excel trening. Dette tipset (3233) gjelder for Microsoft Excel 97, 2000, 2002, og 2003. Du kan finne en versjon av dette tipset for Båndet av Excel (Excel 2007 og senere) her: Hente Web Query data uten avbrudd.