Hvordan lese data fra nettsider med Excel VBA

Denne øvelsen viser hvordan du leser data fra et nettsted, i dette tilfellet oppdaterte valutakurser fra Yahoo.com.

Det antas at leseren har utviklerbåndet vist og er kjent med VBA Editor. Hvis ikke, vennligst Google "Excel Developer Tab" eller "Excel Code Window".

Forutsetninger inkluderer kunnskap om å fylle ut kombinasjonsbokser og definere navn.

Arbeidsboken består av to ark:

Brukergrensesnittet:Brukergrensesnittet

Kombinasjonsboksene Kjøp og salg refererer til det lokale dataarket nedenfor.

Tabellen på D11 vil automatisk limes inn fra selve nettstedet, og brukerformateringen beholdes.Kjøp og selg valutaer

Xlsm for denne øvelsen kan lastes ned her..

Bygg applikasjonen selv.

Lag et ark med to kombinasjonsbokser. Kombinasjonsboksene vil referere til celler på et andre ark.

Kombinasjonsboksene vil også påkalle koden for å lese nettstedet ved å bruke Endring hendelse.

Valutanavn kan limes inn i det andre arket ("Valutaer") fra listen nedenfor, sorteringsrekkefølgen er et spørsmål om personlig preferanse:

ZAR
USD
EUR
GBP
CHF
AUD
NZD
JPY
CAD
SEK
DKK
NOK
WALL
HKD
SGD
ILS
AED
INR
CNY

Lim inn dataene i kolonne B og E.

Definer navn og bruk indeksfunksjoner i henhold til illustrasjonen:Kjøp og selg valutaer

Siden navn er definert på det lokale dataarket "Valuta", må arket "Hoved" kun referere til de definerte navnene for å få verdien, dvs. =SELG og =KJØP for henholdsvis "Hoved"-celler E10 og G10.

Vi skal programmere Excel for å lese nettet. Den har imidlertid sin egen innebygde prosess på Data-båndet, en forekomst som du kanskje vil ta opp som en makro når du bygger forskjellige scenarier. Vær oppmerksom på at datamaskin- eller nettleserkonfigurasjoner kan påvirke nettsideskriptene negativt.

Koden

Sett inn en modul, og skriv inn følgende:

Option Explicit

Sub Ticker()
  Dim currBuy As String
  Dim currSell As String

  Range("D11:F14").ClearContents      'prepare the ground for the web data
  currBuy = Range("BUY")          'get variable values from Defined Names previously set up
  currSell = Range("SELL")
  With ActiveSheet.QueryTables.Add(Connection:= _
    "URL;http://finance.yahoo.com/q?s=" & currBuy & currSell & "=X", Destination:=Range("$D$11"))
    .Name = "q?s=" & currSell & currBuy & "=X"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .WebSelectionType = xlSpecifiedTables
    .WebFormatting = xlWebFormattingNone
    .WebTables = """table1"""
    .WebPreFormattedTextToColumns = True
    .WebConsecutiveDelimitersAsOne = True
    .WebSingleBlockTextImport = False
    .WebDisableDateRecognition = False
    .WebDisableRedirections = False
    .Refresh BackgroundQuery:=False
  End With
End sub

Sub DropDown2_Change()    'This event will call the routine above. Object name might differ.
    Call Ticker
End Sub

Sub DropDown1_Change()
    Call Ticker
End Sub

Lagre arbeidsboken som type xlsm.

Test koden ved å endre verdiene til kombinasjonsboksene, og finjuster deretter formatene til den limte tabellen (fire desimaler, rutenett, skygger?).

Korrupsjon av Excel-filer

Excel er til tider kjent for å ødelegge filer ved lagring, og deretter forsøke sin egen selvgjenopprettingsrutine som ofte, etter min erfaring, rett og slett ikke fungerer. Dette kan være katastrofalt for brukeren, siden det er kildefilen (muligens din eneste kopi) som blir ødelagt. Skadede Excel-filer kan imidlertid repareres ved hjelp av tredjepartsverktøy, noe som sparer betydelig tid og krefter.

Forfatterintroduksjon:

Felix Hooker er en datagjenopprettingsekspert innen DataNumen, Inc., som er verdensledende innen datagjenopprettingsteknologier, inkludert reparasjon rar arkiv~~POS=TRUNC og sql-programvareprodukter. For mer informasjon besøk www.datanumen. Med

Kommentarer er stengt.