Potrzebuję napisać prosty programik w Excelu, który będzie pobierał kurs walut z NBP po podaniu daty.
Czyli podaję mu w komórce datę w odpowiednim formacie i on automatycznie sprawdza, jaki był kurs np. Euro w NBP.
Potrzebuję napisać prosty programik w Excelu, który będzie pobierał kurs walut z NBP po podaniu daty.
Czyli podaję mu w komórce datę w odpowiednim formacie i on automatycznie sprawdza, jaki był kurs np. Euro w NBP.
Zakładam, że chodzi o daty historyczne.
Na stronie NBP są przechowywane stare kursy walut. Możemy je znaleźć pod adresem:
http://www.nbp.pl/home.aspx?c=/ascx/archa.ascx
Można ściągnąć kursy z całego roku, a potem wyszukiwać.
Zakładam jednak, że chodziło o ściągnięcie kursów tylko z konkretnego dnia.
Na stronie NBP: http://rss.nbp.pl/kursy/TabelaA.xml
Są przechowywane w postaci plików XML kursy z konkretnego dnia (plik mediów).
Po wejściu na plik mediów, przechodzimy na stronę:
Składanie adresu strony:
A - rok dla którego jest podany kurs.
B - dwucyfrowy rok.
C - Numer dnia roboczego w tym roku ( numer zawsze jest trzy znakowy - jeżeli jest krótszy niż trzy znaki to uzupełniany jest cyframi zero).
Rozwiązanie będzie oparte na imporcie informacji z XML-a.
- funkcja liczy ilość dni roboczych pomiędzy datami =dni.robocze(data_pocz;data_koń;święta),
- data_pocz - to pierwszy dzień danego roku - dlatego Data(rok(h3);1;1),
- data_koń - to data która nas interesuje podana w komórce H3,
- święta to nasz lista świąt - patrz punkt 1.
Sub zrob() Dim kursw As Worksheet Set dzienr = Nothing Set adres = Nothing ' tworzymy numer dnia roboczego jeżeli jest mniejszy od 10 dodajemy dwa zera ' jezeli jest mniejsza niż 100 dodajemy jedno 0 ' patrz składnia adresu punkt C Set dzienr = ActiveWorkbook.Worksheets("daty").Range("f3") If dzienr < 100 Then If dzienr < 10 Then dzienr = "00" & dzienr End If dzienr = "0" & dzienr End If ' aby działało na inne lata budujemu składnie adresu rok = Year(Worksheets("daty").Range("h3")) znaki = Right(rok, 2) adres = "http://rss.nbp.pl/kursy/xml2/" & rok & "/a/" & znaki & "a" & dzienr & ".xml" On Error Resume Next Set kursw = Sheets("kurs") On Error GoTo 0 ' jezeli jest arkusz kurs to If Not kursw Is Nothing Then ' jeżeli jest kasujemy wcześniejsze mapowanie xml If ActiveWorkbook.XmlMaps.Count > 0 Then ActiveWorkbook.XmlMaps(1).Delete End If ' jezeli jest kasujemy instniejace połaczenie ze źródłem If ActiveWorkbook.Connections.Count > 0 Then ActiveWorkbook.Connections(1).Delete End If ' wyłaczymy komunikaty Application.DisplayAlerts = False ' kasujemy arkusz Sheets("kurs").Delete Application.DisplayAlerts = True End If ' teraz dodakemu nowy arkusz ActiveWorkbook.Worksheets.Add ActiveSheet.Name = "kurs" ' imporutjemy do komórki a1 z wcześniej zbudowanego adresu kurs ActiveWorkbook.XmlImport URL:= _ adres, ImportMap:=Nothing, _ Overwrite:=True, Destination:=Range("$A$1") End Sub
Załączniki