Valutakoersen automatisch bijwerken (2)

Vorig jaar juni schreef ik hoe ik in mijn beleggingsspreadsheet automatisch de valutakoersen bijwerk met behulp van een API. Dat werkt al ruim een jaar probleemloos. Maar afgelopen weekend kreeg ik een foutmelding toen ik mijn wekelijkse beleggingsrapportage verwerkte. Er was iets veranderd in de API.

Inmiddels moet je een abonnement nemen om de API te kunnen gebruiken. Voor kleine gebruikers zoals ik is dat gelukkig gratis. Ik heb me dus als gebruiker geregistreerd, want de functie is erg handig. Maar er zijn ook wijzigingen in de manier waarop je de API moet aanroepen. Daar moest ik dus mijn macro voor aanpassen.

Mijn functie heet GetExchangeRate. Als variabelen krijgt die mee een datum en een valuta-code. Daarmee haalt deze functie bij de API de valutakoers op van de gevraagde valuta op de gevraagde datum (in heden of verleden, uiteraard), tegen de standaard-valuta die ik in mijn spreadsheet heb ingesteld (in mijn geval de Euro). Onderstaand vind je de actuele code van deze macro:

Function GetExchangeRate(Datum As Date, toCurr As String) As Double

    Dim TempDate As String
    Dim qurl As String
    Dim TempOutcome As String
    Dim fromCurr As String
    
    TempDate = CStr(Format(Datum, "yyyy-MM-DD"))
    fromCurr = "EUR"
    qurl = "http://data.fixer.io/" & TempDate & "&access_key=jouweigenkey&base=" & fromCurr & "&symbols=" & toCurr
    
    TempOutcome = Left(Right(Application.WorksheetFunction.WebService(qurl), 10), 8)
    
    If Left(TempOutcome, 1) = ":" Then
        TempOutcome = Right(TempOutcome, 7) & "0"
    End If
    
    If Mid(TempOutcome, 2, 1) = ":" Then
        TempOutcome = Right(TempOutcome, 6) & "00"
    End If
    
    If Mid(TempOutcome, 3, 1) = ":" Then
        TempOutcome = Right(TempOutcome, 5) & "000"
    End If
    
    If Mid(TempOutcome, 4, 1) = ":" Then
        TempOutcome = Right(TempOutcome, 4) & "0000"
    End If
    
    If Mid(TempOutcome, 5, 1) = ":" Then
        TempOutcome = Right(TempOutcome, 3) & "00000"
    End If
    
    If Mid(TempOutcome, 6, 1) = ":" Then
        TempOutcome = Right(TempOutcome, 2) & "000000"
    End If
    
    If Mid(TempOutcome, 7, 1) = ":" Then
        TempOutcome = Right(TempOutcome, 1) & "0000000"
    End If
    
    GetExchangeRate = CDbl(TempOutcome / 1000000)
    
End Function

De bovenstaande wijzigingen zijn nog niet doorgevoerd in de versie die je op mijn Downloads-pagina kunt downloaden!

Heb jij wel eens te maken met aanpassingen in jouw spreadsheets?

Dit bericht heeft 7 reacties

  1. Erik

    Mijn spreadsheets hebben geen externe bronnen, het blijft dus een combinatie van kort maandelijks handwerk om een paar variabelen in te vullen (5 minuten hooguit) en formules/grafieken die de rest automatisch bijwerken. Maar ik houd ook een stuk minder bij dan jij doet!

  2. Peter

    Ik krijg consequent een foutmelding bij het openen van het tabblad “Actual”. Er lijkt iets te missen in de sheet. De foutmelding is : “Can’t open PivotTable source file [Naam v/d Excel]Portfolio’.

    Hierdoor werkt de sheet niet helaas.

    Toch bedankt voor het delen 🙂

    1. Geldnerd

      Ik zal er even naar kijken deze week.

    2. Geldnerd

      Peter, ik heb vanmiddag even de spreadsheet getest zoals ‘ie op mijn website staat, en ik kan de fout hier niet reproduceren. De foutmelding die jij krijgt duidt erop dat er iets mis is met het tabblad Portfolio, dat is waar de Pivot al z’n gegevens vandaan haalt. Is dat bij jou misschien leeg of verwijderd?

      1. Peter

        Dank voor je reactie. Ik heb het kunnen oplossen door op de Pivot Table te gaan staan, en via het ‘Analyze’ menu, te kiezen voor ‘Change Data Source’, en het pad te verwijderen, zodat alleen nog ‘Portfolio!$A:$W’ overblijft. Eventueel een tip voor mensen die deze fout ook krijgen, Excel schijnt dit vaker te vertonen als een XLS gedownload wordt en in een ander pad (lokaal) wordt gezet.

        1. Geldnerd

          Goede tip, dankjewel! Ik zal het ook op de Downloads pagina zetten.

  3. Ontsladebaas

    Ik wijzig sporadisch wat zaken in mijn rapportages. Dit doe ik echter niet ad-hoc maar ik verzamel wat van mijn eigen wensen. Eens in de zoveel tijd neem ik een uurtje om ze aan te passen.

Reacties zijn gesloten.