Elektroda.pl
Elektroda.pl
X
SterControl
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[VBA] - pobieranie danych ze strony internetowej

Martini82 21 Mar 2014 13:53 3468 14
  • #1 21 Mar 2014 13:53
    Martini82
    Poziom 8  

    Cześć

    szukam podpowiedzi jak w osobnych arkuszach excela umieścić tablice ze strony www,, na której publikowane są dane co 1 godzinę. Interesują mnie tablice co godzinę na dobę wstecz. Obecnie mam kod, który pobiera dane z godziny 6:00 za dzień uruchomienia makra i dzień poprzedni.

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    adresu nie podaję, krzyczą, że nie mogę podpinać linków.

    Proszę o podpowiedź.

    0 14
  • SterControl
  • #2 21 Mar 2014 18:38
    adamas_nt
    Moderator Programowanie

    Jeśli kod działa, to wystarczy odfiltrować niepotrzebne, potrzebne skopiować do z góry upatrzonych zakresów... albo czegoś nie rozumiem.

    0
  • #3 21 Mar 2014 18:54
    JRV
    Specjalista - VBA, Excel

    Witam
    Więc rozumiem, że Pan chce mieć 24 arkuszy w skoroszycie.
    Zależy jeszcze od tej godziny dzień aktualizacji danych.
    Niedobór powyżej określonego skryptu jest że to stale dodaje kwerendy, ale nie usunąć poprzedni jak i nazw, które są stale wzrosła w skoroszycie.

    Dodano po 5 [minuty]:

    Myślę, że lepiej makro tylko zmiana parametru "Connection" i zaktualizować tabelę(Odświeżanie kwerend)

    0
  • SterControl
  • #4 23 Mar 2014 21:31
    Martini82
    Poziom 8  

    adamas_nt:
    Jeśli kod działa, to wystarczy odfiltrować niepotrzebne, potrzebne skopiować do z góry upatrzonych zakresów... albo czegoś nie rozumiem.

    Kod działa. Całe makro (jest trochę szersze) pobiera dane ze strony z godziny 6:00 z dnia, w którym makro jest uruchamiane i z godziny 6:00 dnia poprzedniego i potem wykonuje już inne operacje. Jednak na ten moment zależy mi na jego rozbudowie tak, by dane były pobierane częściej. Zakładam, że należy określić podstawę czasu w dwóch miejscach 1. "data=dzis,dzis=date-k" oraz 2. "url;..." Tylko nie mogę dojść jak to zrobić. Na stronie można wyświetlić dane z danego dnia i konkretnej pełnej godziny, stąd pomysł, żeby pobrać je automatycznie do osobnych arkuszy. Tym bardziej, że jak się w wierszu z URL zamieni 2006:00:00 na np 2007:00:00 pobierane są dane z godziny 7:00. Jedyne co mi się udało to do jednego arkusza pobrać dane z kilku godzin (poprzez powielenie całego fragmentu WITH-END WITH, za każdym razem wprowadzając inną godzinę. Wówczas problemem dla mnie jest definicja komendy destination: - jak przypisać pobieranie tabel z www do kolejnych arkuszy - utworzyć je wcześniej ręcznie i wprowadzić odwołanie do każdego arkusza?

    1
  • Pomocny post
    #5 23 Mar 2014 22:43
    adamas_nt
    Moderator Programowanie

    Hmm... Skoro 2006 to 6:00, 2007 7:00 itd Powinno działać coś takiego

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    1
  • #6 24 Mar 2014 18:14
    JRV
    Specjalista - VBA, Excel

    Pierwsze - %20 to jest spacia

    adamas_nt napisał:
    QueryTables.Add(Connection:=
    JRV napisał:
    stale dodaje kwerendy, ale nie usunąć poprzedni jak i nazw, które są stale wzrosła w skoroszycie


    Dodano po 2 [minuty]:

    W jakiej godzinie dnia Pan chce wziąć dane?

    Dodano po 3 [minuty]:

    Dość jednej kwerendy na Web, po prostu zmienić datę i godzinę, odświeżyć kwerendy i skopiować dane do bazy danych

    0
  • #7 25 Mar 2014 13:34
    Martini82
    Poziom 8  

    Po uwzględnieniu kodu adamas_nt

    w postaci:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    zwraca mi runa 438: Object doesn't support this property or method.
    z odwołaniem do wiersza Sheets(licznik).Active

    czy mam mieć pustego excela czy przygotowanego np z 24 arkuszami?

    W tym poście kod zawiera witrynę www.

    JRV: potrzebuję dane co godzinę z całej doby od godziny 6:00 dnia, w którym uruchamiam makro do 6:00 dnia poprzedniego.

    Dodano po 1 [godziny] 38 [minuty]:

    Cześć,

    po zastosowaniu kodu
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    z warunkiem, że w excelu są uruchomione minimum dwa arkusze (przy jednym wszystkie wyniki ładuje do jednego bez tworzenia kolejnych)
    makro działa następująco: dla warunku "g = 6 to 7" tworzy cztery arkusze z danymi z 25.03 z godziny 6 i 7 oraz dla 24.03 z godziny 6 i 7.

    usunąłem frazę "licznik = licznik + 1" bowiem owszem makro tworzy kolejne arkusze, ale nie wypełniane są danymi.

    Dla warunku "g = 0 to 23" tworzy arkusze z danymi co godzinę za całe dwie doby.
    Czy można, np wprowadzając dodatkowy parametr, ustalić zakres żeby makro pobierało dane i tworzyło arkusze od godziny, w której uruchamiane jest makro do 24h wstecz?
    Lub jak ustawić żeby "na sztywno" makro pobierało dane co godzinę np między 6:00 a 6:00?

    Dodano po 4 [godziny] 14 [minuty]:

    Panowie,
    bardzo dziękuję - udało się!

    kodem:
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    makro pobiera dane co trzy godziny i umieszcza je w kolejnych arkuszach o zdefiniowanej nazwie; dane pobierane są w dniu uruchomienia makra co trzy godziny za całą dobę oraz za dzień poprzedni - również co trzy godziny za całą dobę. Z uwagi definicję podstawy czasu makro tworzy puste arkusze do końca doby, w której uruchamiane jest makro.

    Moje ostatnie w tym wątku pytanie dotyczy definicji podstawy czasu,
    aby dla porządku makro nie generowało tych pustych arkuszy w przód, do końca doby i ewentualnie tych za pierwsze godziny poprzedniej doby.
    Macie jakiś pomysł jak przyjąć podstawę czasu?

    A i drugie pytanie: w prezentowanych na www tabelach można wybrać dane z określonego rejonu np. Kraków. Problem w tym, że jak się wprowadzi w wierszu z URL KRAKÓW:
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    makro nie pobiera danych - myślę, że problem tkwi w odczytaniu polskich znaków,
    bo jeśli prowadzi się inne miasto np. Olsztyn, dane spokojnie są pobierane.
    Istnieje jakiś sposób kodowego zapisu ó,ł czy ś w VB?

    0
  • Pomocny post
    #8 25 Mar 2014 18:08
    JRV
    Specjalista - VBA, Excel

    ChrW(NumerUnicode)

    Dodano po 29 [minuty]:

    w URL zwykle wszystkie krajowe symboli jako %(NumUnicode) - Ó = %D3

    Dodano po 10 [minuty]:

    Kraków = %4b%72%61%6b%f3%77

    0
  • #9 26 Mar 2014 07:30
    Martini82
    Poziom 8  

    JRV: Piękne dzięki - ładnie wszystko chodzi.

    Aby otrzymać tablicę dla samego Wrocławia zamiast znaku diakrytycznego "ł"
    użyłem kodowania Unicode:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    i spokojnie działa.

    A macie pomysł jak zdefiniować zakres czasu, żeby tablice były pobierane z krokiem (step) od przykładowej godziny n do godziny k ?

    0
  • Pomocny post
    #10 26 Mar 2014 08:24
    adamas_nt
    Moderator Programowanie

    Najłatwiej: podstawić zmienne pobrane z InputBox'ów. Tu masz wybór:
    -przypisanie ich przed pętlą 'For k' - dla wszystkich dni równo (prościej)
    -przypisanie wewnątrz - indywidualnie dla każdego dnia. Np

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #11 26 Mar 2014 11:25
    Martini82
    Poziom 8  

    Dzięki Wielkie adamus_nt,

    powalczę z tym,

    jak zadziała, wrzucę kod, może się komuś przyda jeszcze.

    Pozdrawiam!

    0
  • #12 26 Mar 2014 21:40
    JRV
    Specjalista - VBA, Excel

    Witam
    Tak jak napisał, dość jednej kwerendy na Web, po prostu zmienić datę i godzinę, odświeżyć kwerendy i skopiować dane do bazy danych.
    Tu jednu kwerendu może odbywać się ręcznie, a następnie używać je.
    Nie mogłem znaleźć odpowiedniej strony internetowej do różnych godzin, ale to pokaże Ci jak to zrobić. Przy temu skoroszyt nie jest wypełniony nowe kwerendy i nazwy.

    p.s. Jeśli było, że Pan dał prawdziwy adres URL, to będzie bardziej konkretnie

    0
  • #14 27 Mar 2014 16:00
    JRV
    Specjalista - VBA, Excel

    Natychmiast próbował, ale jakoś nie jest dostępny, więc pomyślałem, że to nie jest prawidłowa

    Dodano po 17 [minuty]:

    adresy z zakresu 172.16. x. x - 172.31.x.x jest prywatne lub firmowe i niedostępne z Internetu

    0
  • #15 18 Lut 2015 13:07
    Martini82
    Poziom 8  

    Po czasie, ale dziękuję wszystkim za pomoc. Makro po drobnych modyfikacjach działa poprawnie.
    Temat zakończony.

    0