Deze oefening laat zien hoe u gegevens van een website leest, in dit geval actuele wisselkoersen van Yahoo.com.
Aangenomen wordt dat de lezer het ontwikkelaarslint heeft weergegeven en bekend is met de VBA-editor. Als dit niet het geval is, gebruik dan Google "Excel Developer Tab" of "Excel Code Window".
Vereisten omvatten kennis van het vullen van keuzelijsten met invoervak en het definiëren van namen.
Het werkboek bestaat uit twee bladen:
De gebruikersinterface:
De keuzelijsten met invoervak Kopen en verkopen verwijzen naar het onderstaande lokale gegevensblad.
De tabel op D11 wordt automatisch van de website zelf geplakt, waarbij de opmaak van de gebruiker behouden blijft.
De xlsm voor deze oefening kan worden gedownload hier.
Zelf de applicatie bouwen.
Maak een blad met twee keuzelijsten met invoervak. De keuzelijsten met invoervak verwijzen naar cellen op een tweede blad.
De combo-boxen zullen ook de code aanroepen om de website te lezen, met behulp van de Veranderen evenement.
Valutanamen kunnen in het tweede blad ("Valuta's") uit de onderstaande lijst worden geplakt, waarbij de sorteervolgorde een kwestie van persoonlijke voorkeur is:
| ZAR |
| USD |
| EUR |
| GBP |
| CHF |
| AUD |
| NZD |
| Japanse Yen |
| CADXPERT / LANDXPERT |
| € |
| USD |
| NOK |
| MUR |
| HKD |
| SGD |
| ILS |
| AED |
| INR |
| CNY |
Plak de gegevens in de kolommen B en E.
Definieer namen en gebruik indexfuncties zoals aangegeven in de afbeelding:
Aangezien namen zijn gedefinieerd op het lokale gegevensblad "Valuta's", hoeft blad "Hoofd" alleen naar de gedefinieerde namen te verwijzen om de waarde te krijgen, dwz = VERKOPEN en = KOPEN voor respectievelijk de "Hoofd" -cellen E10 en G10.
We gaan Excel programmeren om het web te lezen. Het heeft echter een eigen ingebouwd proces op het datalint, waarvan u een exemplaar misschien wilt opnemen als een macro bij het bouwen van verschillende scenario's. Merk op dat computer- of browserconfiguraties een nadelige invloed kunnen hebben op webpagina-scripts.
De code
Voeg een module in en voer het volgende in:
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
Sla de werkmap op als type xlsm.
Test de code door de waarden van de keuzelijsten met invoervak te wijzigen en vervolgens de formaten van de geplakte tabel op te frissen (vier decimalen, rasterlijnen, arcering?).
Corruptie van Excel-bestanden
Van Excel is soms bekend dat het bestanden bij het opslaan corrumpeert, waarna het zijn eigen zelfherstelroutine probeert, die naar mijn ervaring vaak gewoon niet werkt. Dit kan rampzalig zijn voor de gebruiker, aangezien het bronbestand (mogelijk uw enige kopie) wordt vernietigd. Beschadigde Excel-bestanden kan echter worden gerepareerd met tools van derden, wat veel tijd en moeite bespaart.
Auteur Introductie:
Felix Hooker is een expert op het gebied van gegevensherstel DataNumen, Inc., de wereldleider in technologieën voor gegevensherstel, waaronder reparatie rar archief en sql-herstelsoftwareproducten. Voor meer informatie bezoek www.datanumen.com
