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

Excel - VBA - Dane zwenętrzne z sieci web

Draco2020 28 Maj 2014 20:06 2508 21
  • #1 28 Maj 2014 20:06
    Draco2020
    Poziom 7  

    Hej Wszystkim,

    przyznaję, bez bicia, że poniższe makro jest nagrane

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    I teraz moje pytanie. Jak przerobić ten kod, by przykładowo excel z komórek w kolumnie H pobierał wartość każdej komórki po kolei w dół i za każdym razem dodawał ją do strony adresu, by ją otworzyć, zimportować do excela w nowym arkuszu, obrobić resztą kodu, podać wynik i otworzyć kolejną stronę?

    Trochę to pytanie zagmatwane więc podam na przykładzie:

    w kolumnie H są umieszczone następujące wartości:
    H1 20103040
    H2 30101122
    H3 32421313
    H4 39393939
    ...
    H2000 20102010

    Teraz excel musiał by otworzyć stronę internetową https://www.pewnastronawwwzdanymi:=10102010 skopiować jej zawartość do nowego arkusza i skopiować wartość z komórki D3 a następnie ją wkleić dla danej wartości w poprzednim arkuszu.

    Czyli excel musiał by otworzyć stronę https://www.pewnastronawwwzdanymi:=H1
    Pobrać ją do arkusza2 skopiować wartość z komórki D3 i wkleić ją do arkusza1 w komórce Z1

    Następnie otworzyć stronę https://www.pewnastronawwwzdanymi:=H2,, pobrać do arkusza2, skopiować D3 i wkleić do arkusza1 w komórce Z2

    itd, itp

    Z góry dziękuję za odpowiedź

    0 21
  • #2 31 Maj 2014 17:22
    Draco2020
    Poziom 7  

    Hej hej,

    nie myślcie, że czakam na gotowy kod :)

    Udało mi się już coś samemu zrobić i jakoś działa

    Czy mógł by mi ktoś napisać tylko dlaczego wywala mi błąd

    Kod: vb
    Zaloguj się, aby zobaczyć kod



    Myślałem, że konstrukcja

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    jest poprawna, a tu się okazuje, że nie. Prosił bym o pomoc i jeżeli to nie problem o w miarę łopatologiczne wytłumaczenie dlaczego wystąpił błąd

    Z góry dziękuję

    0
  • Pomocny post
    #3 31 Maj 2014 18:33
    JRV
    Specjalista - VBA, Excel

    Witaj
    Spróbuj wymienić

    Code:
    If Sheet1.Cells(irow, 11).Value = "Dex" Then

    na
    Code:
    If Sheets("Sheet1").Cells(irow, 11).Value = "Dex" Then

    Excel wersja angielska?

    edit:
    aj...
    irow - nie zostały jeszcze przypisane wartości

    0
  • #4 31 Maj 2014 18:54
    Draco2020
    Poziom 7  

    Hej,

    dzięki za odpowiedź

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Niestety nie pomogło, nadal się wysypuje i pokazuje error 1004 :(

    Jeżeli chodzi o excel'a to kod rzeczywiście jest pisany w angielskim excelu.

    Jednakże przez weekend będę kontynuował na polskiej wersji. Czy to jest jakaś różnica?

    edit:

    przepraszam, nie zauważyłem Twojej edycji...program poszedł

    Dodano po 15 [minuty]:

    Mam jeszcze jedno pytanie. Czy poniższy kod jest poprawny?

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #5 31 Maj 2014 19:15
    JRV
    Specjalista - VBA, Excel

    Draco2020 napisał:
    Jednakże przez weekend będę kontynuował na polskiej wersji. Czy to jest jakaś różnica?

    Wyrażenie Sheet1 nie będzie działać, to nazwę oprogramowania i nie nazwę arkusza("Arkusz1") Excel - VBA - Dane zwenętrzne z sieci web

    Dodano po 20 [minuty]:

    Początkowo tworzenia obiektu
    Code:
    Set ieApp = CreateObject("InternetExplorer.application")

    następnie używać go
    Code:
    With ieApp
    
       .Visible=True
       .Navigate ....

    Jeśli to było 'With', następnie należy 'End With'
    Code:
    With appIE
    
        .Visible = True
        .navigate myUrl
    End With
    Podobnie, jak If.. End If, Do .. Loop, While.. Wend

    Bez ".......reszty kod" do sprawdzenia poprawności wątpliwe

    1
  • #6 31 Maj 2014 19:17
    Draco2020
    Poziom 7  

    Nie wiedziałem, że to jest, aż tak znacząca różnica. Będę pamiętał na przyszłość. Dzięki :)

    Niestety muszę zadać jeszcze jedno, mam nadzieję, że ostatnie już pytanie

    Wiem już, że kod

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    jest niepoprawny. Jak napisać, by Excel najpierw sprawdził, czy w kolumnie 11 w każdym wierszu znajduje się "Dex", a gdy znajdzie już taką komórkę np. K10, ma dodatkowo sprawdzić komórkę M10, czy znajduje się w niej wartość 2, jeżeli tak to wykonuje resztę kodu?

    0
  • Pomocny post
    #7 31 Maj 2014 19:23
    JRV
    Specjalista - VBA, Excel

    Code:
    If Sheets("Sheet1").Cells(irow, 11).Value = "Dex" And Sheets("Sheet1").Cells(irow, 13).Value = "2" Then

    lub
    Code:

    If Sheets("Sheet1").Cells(irow, 11).Value = "Dex"  Then
         If Sheets("Sheet1").Cells(irow, 13).Value = "2" Then <nieco>
    End If
    działa szybciej

    opcja
    Code:

    With Sheets("Sheet1")
        If .Cells(irow, 11).Value = "Dex" Then
             If .Cells(irow, 13).Value = "2" Then MsgBox "Yes"
        End If
    End With

    0
  • #8 31 Maj 2014 19:30
    Draco2020
    Poziom 7  

    Naprawdę to było takie proste And zamiast "&". Nie wierzę :!:

    Bardzo dziękuję za pomoc, biorę się za dalszy kod. W razie problemów oraz dziwnych pytań będę pisał.

    Wielkie dzięki :)

    0
  • #9 03 Cze 2014 08:56
    Draco2020
    Poziom 7  

    Czy ktoś mógł by mi powiedzieć jak zrobić by:

    Dane pobierane sa z Sheet1 komórka H1, kod programu robi swoje, wynik jest uzyskiwany w Sheet3 (w niej również gdzieś znajduje się wartość z komórki H1) i teraz chodzi o to aby ten wynik skopiować spowrotem do Sheet1 ale do komórki J1 względem komórki H1

    0
  • Pomocny post
    #10 03 Cze 2014 13:07
    JRV
    Specjalista - VBA, Excel

    Witam.
    Czuć, że jesteś nie jasne powiedział. Najprawdopodobniej idziesz wzdłuż wierszy, ich numeracja w zmiennej.

    Code:

    Sheet1.Cells(irow,10)=Sheet3.Cells(<niektóry_wersz>, <niektóre_column>)

    0
  • #11 03 Cze 2014 21:16
    Draco2020
    Poziom 7  

    Przerobiłem kod. Pozbyłem się wyszukiwania pierwszej wolnej komórki i zastąpiłem poniższym kodem:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Jednak w trakcie wykonywania kodu odkryłem kolejny problem.
    Na samym początku formatuje wszystkie komórki jako tekst poleceniem

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Jednak po pobraniu strony kodem

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Cells(69, 2) w Sheet3 zmienia w jakiś sposób formatowanie przez co liczba 1010200359272320131004 zmienia format na naukowy i wkleja 1,0102E+21. W związku z czym przerobiony kod przechodzi do pozycji

    Kod: vb
    Zaloguj się, aby zobaczyć kod




    Jak temu zapobiec?

    0
  • #12 03 Cze 2014 21:30
    JRV
    Specjalista - VBA, Excel

    Sprobuj 'If Sheet3.Cells(69, 2).Text = Sheet1.Cells(2, 8) '

    lub 'If Cstr(Sheet3.Cells(69, 2)) = Sheet1.Cells(2, 8) '

    0
  • #13 03 Cze 2014 21:45
    Draco2020
    Poziom 7  

    Nie pomogło. Czy może to być związane z tym, że kod na pobieranie strony został zarejestrowany?

    0
  • #14 03 Cze 2014 21:56
    JRV
    Specjalista - VBA, Excel

    Nie związane .
    'If Format(Sheet3.Cells(69, 2),"0") = Sheet1.Cells(2, 8) Then '

    0
  • #15 03 Cze 2014 22:02
    Draco2020
    Poziom 7  

    JRV napisał:

    'If Format(Sheet3.Cells(69, 2),"0") = Sheet1.Cells(2, 8) Then '


    Nadal wklejana jest liczba 1,0102E+21

    0
  • #16 03 Cze 2014 22:11
    JRV
    Specjalista - VBA, Excel

    Pozostanie

    Code:

    If Sheet3.Cells(69, 2) = Val(Sheet1.Cells(2, 8)) Then

    0
  • #17 03 Cze 2014 22:12
    Draco2020
    Poziom 7  

    Niestety również nie działa

    0
  • #18 03 Cze 2014 22:17
    JRV
    Specjalista - VBA, Excel

    Więc może oni naprawdę nie równa

    0
  • #19 03 Cze 2014 22:20
    Draco2020
    Poziom 7  

    Po otwarciu strony internetowej w przeglądarce (bez udziału Excela) wyświetla się ta sama liczba, dopiero po pobraniu jej do Excela zmienia postać na 1,0102E+21

    0
  • #20 04 Cze 2014 10:21
    JRV
    Specjalista - VBA, Excel

    Ponieważ projekt jest podłączony do biblioteki MSHTML, może lepiej korzystać z obiektem .Document do pobierania nie całą stronę, tylko szczegółowe dane

    0
  • #21 04 Cze 2014 12:20
    Draco2020
    Poziom 7  

    JRV napisał:
    Ponieważ projekt jest podłączony do biblioteki MSHTML, może lepiej korzystać z obiektem .Document do pobierania nie całą stronę, tylko szczegółowe dane


    Jak już wcześniej mówiłem, nie jestem na tyle zaawansowany. Tak więc nie wiem jak zrobić takie szczegółowe pobieranie. Poradziłem sobie z tym w nieco inny sposób - swoją drogą trochę dziwny, aczkolwiek działa

    0
  • #22 13 Cze 2014 10:43
    Draco2020
    Poziom 7  

    Szukałem na wielu stronach ale niestety nie znalazłem rozwiązania swojego problemu.

    Przerobiłem całkowicie swój kod, który wygląda następująco:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Problem w tym, że excel musi przerobić od 8000 do nawet 20000 wierszy. I tak po przerobieniu pewnej ilości wyskakuje błąd: "Run Time Error '2147023706(800704a6)': Automation error. A system shutdown has already been scheduled"

    w lini

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Przeczytałem, gdzieś na zagranicznym forum, że jest to związane z zabezpieczeniami w opcjach internetowych (tych w panelu sterowania) i wystarczy je zmienić. Niestety, opcje te są zablokowane u mnie, więc szukałem innego rozwiązania i przeczytałem, że wystarczy dopisać MEDIUM w linijce z błędem, by pozbyc się uciążliwych zabezpieczeń...jest to nieprawda, pojawia się jedynie okno IE a mi zależy, by okno się nie pokazywało.

    Czy ktoś z Was ma jakiś pomysł?

    0
  Szukaj w 5mln produktów