VBA i API: jak połączyć Excela z zewnętrznymi systemami (np. pobrać kursy walut NBP)?
Dowiedz się, jak połączyć Excela z API NBP za pomocą VBA i pobierać dane, takie jak kursy walut. Praktyczny poradnik krok po kroku.
Artykuł przeznaczony dla użytkowników Excela znających podstawy VBA, którzy chcą integrować arkusze z zewnętrznymi API (np. NBP) i przetwarzać odpowiedzi JSON.
Z tego artykułu dowiesz się
- Jak w Excelu wykorzystać VBA do wysyłania zapytań HTTP GET do zewnętrznych API?
- Jak pobrać kursy walut z API NBP i odebrać odpowiedź w formacie JSON w VBA?
- Jak przetwarzać odpowiedzi JSON w Excelu, obsługiwać błędy oraz tworzyć prosty interfejs do uruchamiania makr?
Wprowadzenie do integracji Excela z zewnętrznymi API
Microsoft Excel to nie tylko narzędzie do analizy danych i tworzenia wykresów – dzięki wbudowanemu językowi programowania VBA (Visual Basic for Applications) może stać się również potężnym interfejsem do komunikacji z zewnętrznymi systemami. Jednym z najczęstszych scenariuszy wykorzystania takiej integracji jest pobieranie danych z API (Application Programming Interface), np. aktualnych kursów walut, informacji o pogodzie czy danych finansowych.
API to specjalne interfejsy udostępniane przez serwisy internetowe, które pozwalają na automatyczną wymianę danych między aplikacjami. W przypadku Excela, integracja z API umożliwia dynamiczne pobieranie i aktualizowanie informacji bez konieczności ręcznego kopiowania danych ze stron internetowych.
Typowym protokołem wykorzystywanym do komunikacji z API jest HTTP, a najczęściej używaną metodą – zapytanie typu GET, które pozwala pobrać dane z określonego adresu URL. VBA w Excelu daje możliwość wysyłania takich zapytań i odbierania odpowiedzi, które następnie można przetwarzać i prezentować w arkuszu.
Zastosowania integracji Excela z API są bardzo szerokie i obejmują m.in.:
- automatyczne pobieranie kursów walut z Narodowego Banku Polskiego,
- aktualizację danych giełdowych lub cen produktów,
- sprawdzanie statusów przesyłek kurierskich,
- pobieranie danych pogodowych lub statystycznych.
Choć sama koncepcja może wydawać się złożona, podstawowa integracja API z Excelem nie wymaga zaawansowanej wiedzy programistycznej. VBA umożliwia stworzenie prostych makr, które wykonują takie zadania automatycznie, oszczędzając czas i zwiększając dokładność analiz.
Podstawy zapytań HTTP GET w VBA
Integracja Excela z zewnętrznymi systemami opiera się przede wszystkim na komunikacji przez protokół HTTP. W kontekście Visual Basic for Applications (VBA), jednym z najczęściej używanych typów zapytań jest HTTP GET. Umożliwia on pobranie danych z zewnętrznego źródła, takiego jak publiczne API, bez konieczności wysyłania dodatkowych informacji w treści zapytania.
VBA nie posiada wbudowanego, wysokopoziomowego narzędzia do obsługi żądań HTTP, dlatego najczęściej wykorzystuje się komponent Microsoft XML (MSXML2.XMLHTTP) lub WinHttp.WinHttpRequest. Oba podejścia pozwalają ustanowić połączenie z serwerem, wysłać zapytanie typu GET i odebrać odpowiedź – zazwyczaj w formacie JSON.
Ogólny schemat działania wygląda następująco:
- Tworzenie obiektu do obsługi żądań HTTP.
- Ustawienie adresu URL, który ma zostać wywołany (np. punkt końcowy API).
- Wysłanie żądania metodą GET.
- Odczytanie odpowiedzi z serwera.
Przykład użycia może wyglądać następująco:
Dim http As Object
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", "https://api.przyklad.com/dane", False
http.Send
MsgBox http.responseTextWarto zauważyć, że metoda Open przyjmuje kilka argumentów – typ żądania (np. "GET"), adres URL oraz informację o tym, czy połączenie ma być asynchroniczne. Po wywołaniu Send otrzymujemy odpowiedź, którą można dalej przetwarzać w zależności od formatu danych.
W praktyce, wykorzystanie zapytań HTTP GET w VBA otwiera drogę do pozyskiwania dynamicznych danych w czasie rzeczywistym, co znacznie zwiększa możliwości analityczne arkusza kalkulacyjnego. W kolejnych etapach można dodawać obsługę nagłówków, analizować odpowiedzi serwera lub łączyć się z konkretnymi źródłami danych, np. Narodowym Bankiem Polskim.
3. Przykład połączenia z API NBP przy użyciu VBA
Integracja Excela z API Narodowego Banku Polskiego (NBP) to praktyczny sposób na automatyczne pobieranie aktualnych danych finansowych bez konieczności ręcznego wprowadzania. NBP udostępnia publiczne API, które umożliwia m.in. pobieranie kursów walut w formacie JSON. W tej sekcji przedstawimy ogólny schemat połączenia z tym API z wykorzystaniem języka VBA.
Podstawowe kroki, które należy wykonać w VBA, aby połączyć się z API NBP, to:
- Nawiązanie połączenia HTTP do wybranego zasobu API NBP
- Wysłanie zapytania typu GET
- Odebranie i tymczasowe przechowanie odpowiedzi JSON
Przykładowy endpoint API NBP wykorzystywany do pobierania kursu średniego euro z dnia bieżącego wygląda następująco:
https://api.nbp.pl/api/exchangerates/rates/A/EUR/?format=json
Przykład podstawowego kodu VBA do pobrania danych:
Sub PobierzKursEuro()
Dim http As Object
Dim url As String
Dim odpowiedz As String
Set http = CreateObject("MSXML2.XMLHTTP")
url = "https://api.nbp.pl/api/exchangerates/rates/A/EUR/?format=json"
http.Open "GET", url, False
http.Send
If http.Status = 200 Then
odpowiedz = http.responseText
MsgBox odpowiedz
Else
MsgBox "Błąd połączenia: " & http.Status
End If
End Sub
Powyższy kod demonstruje, jak wysłać podstawowe zapytanie GET i odebrać odpowiedź z API. Na tym etapie dane są jeszcze w surowym formacie JSON i nie są przetwarzane — to zostanie omówione w kolejnych sekcjach.
Warto pamiętać, że API NBP oferuje różne tabele kursów walut (A, B, C), które różnią się zakresem dostępnych walut i typami kursów (np. średni, kupna, sprzedaży). Parametry te można zmieniać dynamicznie w adresie URL, dostosowując zapytanie do konkretnych potrzeb.
| Tabela | Zawartość | Przykład waluty |
|---|---|---|
| A | Kursy średnie większości walut | EUR, USD |
| B | Kursy średnie mniej popularnych walut | THB, MXN |
| C | Kursy kupna i sprzedaży | EUR, USD |
Ten prosty przykład pokazuje, że dostęp do danych z API NBP można uzyskać bezpośrednio z poziomu Excela, co otwiera szerokie możliwości dalszej automatyzacji i analizy danych finansowych. Jeśli chcesz nauczyć się więcej o programowaniu w VBA i tworzeniu własnych rozwiązań w Excelu, sprawdź Kurs VBA (Visual Basic for Applications) w Microsoft Excel podstawowy – zasady tworzenia i kodowania algorytmów oraz automatyzacja pracy i tworzenie aplikacji.
Przetwarzanie odpowiedzi JSON w Excelu
Po nawiązaniu połączenia z wybranym API i uzyskaniu odpowiedzi w formacie JSON, kolejnym krokiem jest jej przetworzenie – czyli odczyt i zapis danych w arkuszu Excela. Excel natywnie nie obsługuje formatu JSON w VBA, dlatego konieczne jest użycie dodatkowych narzędzi lub bibliotek.
JSON (JavaScript Object Notation) to lekki format wymiany danych, który strukturalnie przypomina obiekty i tablice. W kontekście Excela, dane JSON należy zamienić na strukturę zrozumiałą dla VBA – zazwyczaj do postaci typów takich jak Dictionary, Collection lub tablice.
Najczęstsze podejścia do przetwarzania JSON:
- Korzystanie z biblioteki „JsonConverter” – popularna, darmowa biblioteka VBA autorstwa Tim'a Hall'a, która umożliwia parsowanie JSON do struktury słowników i kolekcji.
- Ręczne parsowanie JSON – możliwe przy bardzo prostych strukturach, ale podatne na błędy i niezalecane dla danych zagnieżdżonych.
- Wczytywanie danych JSON jako tekst i późniejsze wykorzystanie funkcji Excela – przydatne w przypadku małych plików lub analiz ad hoc.
Przykład podstawowego wykorzystania biblioteki JsonConverter do przetworzenia odpowiedzi API:
' Wymaga dodania modułu JsonConverter.bas
Dim json As Object
Dim http As Object
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", "https://api.nbp.pl/api/exchangerates/tables/A?format=json", False
http.Send
Set json = JsonConverter.ParseJson(http.ResponseText)
' Przykład odczytania kursu pierwszej waluty:
MsgBox json(1)("rates")(1)("currency") & " - " & json(1)("rates")(1)("mid")
Po przetworzeniu danych JSON możliwe jest ich dynamiczne wpisywanie do komórek Excela, co pozwala na automatyczną aktualizację raportów, analiz czy wykresów.
Porównanie metod przetwarzania JSON
| Metoda | Zalety | Wady |
|---|---|---|
| JsonConverter | Łatwość użycia, obsługa zagnieżdżeń | Wymaga dodania zewnętrznego modułu |
| Ręczne parsowanie | Brak zależności, pełna kontrola | Skalowanie trudne, podatność na błędy |
| Import tekstu do arkusza | Szybkość dla jednorazowych analiz | Brak strukturalnej kontroli nad danymi |
Wybór metody zależy od złożoności danych oraz potrzeby ich dalszego przetwarzania. Dla profesjonalnych zastosowań zdecydowanie zaleca się korzystanie z dedykowanej biblioteki.
Omówienie struktury danych zwracanych przez API
Podczas integracji Excela z zewnętrznym API, kluczowe jest zrozumienie, w jakiej formie dane są zwracane. W przypadku API Narodowego Banku Polskiego (NBP), odpowiedzi zazwyczaj przyjmują postać danych w formacie JSON (JavaScript Object Notation). JSON to lekki format wymiany danych, który jest łatwy do odczytu zarówno dla ludzi, jak i maszyn.
Struktura takiej odpowiedzi może się różnić w zależności od rodzaju zapytania, jednak istnieją wspólne elementy charakterystyczne dla danych zwracanych przez API NBP.
Typowa odpowiedź JSON z API NBP
Poniżej przedstawiono uproszczony przykład odpowiedzi API NBP dla kursów walut:
{
"table": "A",
"currency": "euro",
"code": "EUR",
"rates": [
{
"no": "068/A/NBP/2024",
"effectiveDate": "2024-04-09",
"mid": 4.3212
}
]
}Najważniejsze elementy tej struktury to:
- table – oznaczenie tabeli kursowej (np. A, B, C).
- currency – nazwa waluty (np. „euro”).
- code – trzyliterowy kod waluty (np. „EUR”).
- rates – tablica zawierająca obiekty z informacjami o kursach, z takimi polami jak:
- no – numer tabeli kursowej,
- effectiveDate – data obowiązywania kursu,
- mid – kurs średni waluty.
Porównanie formatu JSON i struktury danych Excela
Aby dane z API były przydatne w Excelu, należy je odpowiednio odwzorować. Poniżej znajduje się porównawcza tabela pokazująca, jak struktura JSON może zostać przekształcona na strukturę tabelaryczną w arkuszu kalkulacyjnym:
| JSON | Excel |
|---|---|
| "currency": "euro" | Kolumna: Nazwa waluty |
| "code": "EUR" | Kolumna: Kod waluty |
| "rates" → "effectiveDate": "2024-04-09" | Kolumna: Data |
| "rates" → "mid": 4.3212 | Kolumna: Kurs średni |
Takie podejście pozwala na łatwe sortowanie, filtrowanie i dalszą analizę danych bezpośrednio w arkuszu. Zrozumienie tej struktury jest kluczowe przed próbą przetwarzania danych w VBA, ponieważ umożliwia poprawne odczytanie żądanych informacji i ich integrację z istniejącymi arkuszami Excela. Jeśli chcesz poszerzyć swoją wiedzę i skutecznie wykorzystywać VBA w pracy z danymi, warto rozważyć udział w Kursie VBA (Visual Basic for Applications) w Microsoft Excel - analiza danych i automatyzacja raportowania.
Obsługa błędów i wyjątków w kodzie VBA
Integrując Excela z zewnętrznymi API za pomocą VBA, niezwykle ważne jest zadbanie o odpowiednią obsługę błędów. Problemy mogą wystąpić na wielu etapach: od błędów sieciowych, przez niepoprawne dane, aż po błędne użycie funkcji w kodzie. Dzięki właściwemu zarządzaniu wyjątkami możemy zapewnić stabilne działanie aplikacji, czytelne komunikaty dla użytkownika oraz łatwiejsze debugowanie.
Dlaczego obsługa błędów jest ważna?
- Stabilność aplikacji: zapobiega nagłemu zatrzymaniu działania makra.
- Informacja dla użytkownika: umożliwia wyświetlenie komunikatu o problemie w zrozumiały sposób.
- Debugowanie: pomaga programiście zidentyfikować źródło błędu.
Metody obsługi błędów w VBA
| Technika | Zastosowanie |
|---|---|
On Error Resume Next |
Pomija błąd i przechodzi do następnej instrukcji; przydatne przy mniej krytycznych operacjach. |
On Error GoTo [Etykieta] |
Przekierowuje wykonanie kodu do bloku obsługi błędu; stosowane przy bardziej złożonych operacjach. |
Err.Number / Err.Description |
Umożliwia analizę typu błędu i podjęcie odpowiednich działań. |
Przykład: podstawowa obsługa błędów dla zapytania HTTP
Sub GetDataFromAPI()
On Error GoTo ErrorHandler
Dim http As Object
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", "https://api.nbp.pl/api/exchangerates/tables/A?format=json", False
http.Send
If http.Status <> 200 Then
MsgBox "Błąd połączenia: " & http.Status
Exit Sub
End If
' Przetwarzanie odpowiedzi JSON...
Exit Sub
ErrorHandler:
MsgBox "Wystąpił błąd: " & Err.Description, vbCritical, "Błąd"
End Sub
Powyższy kod pokazuje prostą strukturę obsługi błędów: w przypadku problemu z połączeniem lub wywołania wyjątku, użytkownik zostaje poinformowany o błędzie, a dalsze wykonywanie makra zostaje przerwane. W bardziej rozbudowanych aplikacjach stosuje się także logowanie błędów oraz ich klasyfikację.
Dobrze zaimplementowana obsługa wyjątków znacząco zwiększa niezawodność i profesjonalizm rozwiązania opartego na VBA i API.
Tworzenie prostego interfejsu użytkownika w Excelu
Po przygotowaniu kodu VBA do komunikacji z API, warto ułatwić użytkownikowi korzystanie z tej funkcjonalności poprzez opracowanie prostego i intuicyjnego interfejsu w samym Excelu. Dzięki temu nawet osoby bez doświadczenia programistycznego będą mogły pobierać dane z zewnętrznych systemów za pomocą kilku kliknięć.
Excel oferuje kilka sposobów na stworzenie interfejsu użytkownika, które można dostosować do konkretnych potrzeb:
- Przyciski formularza (Form Controls) – umożliwiają szybkie dodanie przycisku do arkusza, który można powiązać z procedurą VBA. To najprostszy sposób na uruchomienie kodu.
- Formularze UserForm – bardziej zaawansowana metoda, pozwalająca projektować własne okna dialogowe z kontrolkami takimi jak pola tekstowe, listy rozwijane czy przyciski akcji.
- Komórki jako pola wejściowe – można wykorzystać wybrane komórki jako miejsca do wprowadzenia parametrów (np. daty lub kodu waluty), a wynik zwracać bezpośrednio do arkusza.
Najczęściej stosowanym rozwiązaniem w prostych projektach jest umieszczenie przycisku w arkuszu, który po kliknięciu uruchamia makro pobierające dane z API. Można go łatwo dodać z poziomu zakładki „Deweloper” w Excelu. Alternatywnie, dla bardziej rozbudowanych aplikacji, warto rozważyć stworzenie dedykowanego formularza UserForm, który poprowadzi użytkownika krok po kroku przez proces pobierania danych.
Tworząc interfejs, należy pamiętać o przejrzystości i łatwości obsługi. Dobrze zaprojektowany UI zwiększa użyteczność rozwiązania oraz ogranicza ryzyko błędów użytkownika.
Zastosowania praktyczne i dalsze rozszerzenia
Integracja Excela z zewnętrznymi API otwiera przed użytkownikami szerokie możliwości automatyzacji i usprawnienia codziennej pracy z danymi. Dzięki wykorzystaniu VBA i protokołu HTTP można pobierać aktualne informacje wprost do arkusza kalkulacyjnego, eliminując konieczność ręcznego kopiowania danych.
Jednym z najczęstszych przypadków użycia jest automatyczne pobieranie kursów walut, np. z API Narodowego Banku Polskiego. Ale to tylko początek – podobną metodologię można zastosować do wielu innych źródeł danych:
- Aktualizowanie notowań giełdowych z zagranicznych serwisów finansowych
- Pobieranie prognozy pogody dla określonego miasta w czasie rzeczywistym
- Sprawdzanie statusu wysyłki z systemów kurierskich
- Łączenie się z systemami ERP lub CRM w celu synchronizacji danych
- Import danych statystycznych z otwartych baz danych, jak np. Eurostat lub GUS
W praktyce, każdy system lub usługa oferująca publiczne lub prywatne API może zostać zintegrowana z Excelem. Może to obejmować zarówno zapytania jednorazowe, jak i cykliczne pobieranie danych, np. przy otwarciu pliku lub kliknięciu przycisku. Kluczem jest zrozumienie formatu odpowiedzi (najczęściej JSON lub XML) oraz umiejętność przekształcenia go w dane użyteczne w arkuszu.
Rozszerzeniem podstawowych zastosowań może być budowa dynamicznych dashboardów, które aktualizują się automatycznie, tworzenie raportów porównawczych na podstawie danych z wielu źródeł, a także integracja z usługami chmurowymi, takimi jak Google Maps, OpenWeather czy serwisy społecznościowe.
Możliwości są niemal nieograniczone – wszystko zależy od potrzeb użytkownika i dostępności odpowiedniego API. Excel staje się wtedy nie tylko narzędziem do obliczeń, ale także potężnym interfejsem do pracy z danymi z całego internetu.