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 - Odświeżanie Tabel - błąd odświeżania

Krzysiek6kaczor 24 Sie 2016 10:15 1473 9
  • #1 24 Sie 2016 10:15
    Krzysiek6kaczor
    Poziom 5  

    witam
    mam problem
    przy uruchomieniu makra procedura wyrzuca mi błąd i nie wiem jak sobie poradzić
    zmianna source zadeklarowana jest w następujący sposób
    Public Source As Workbook
    i jest do niej przypisany otwarty podczas wykonywania poniższego makra skoroszyt

    treść błędu:
    Run-time error '1004':
    Application-defined or object-defined error

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    jak mogę sobie z tym poradzić?

    0 9
  • #2 24 Sie 2016 13:31
    adamas_nt
    Moderator Programowanie

    Otwarty, ale czy aktywny? Być może odwołujesz się do nazw arkusza nie tego pliku. Dopisz na początku: Source.activate i daj znać, czy błąd nadal występuje.

    Przy okazji: blok With wewnątrz bloku With nie wygląda dobrze. Powinno być raczej z jednym (wewnątrz pętli For): With Source.Sheets(k(i)). A skoro jest aktywny, samo With Sheets(k(i))

    0
  • #3 24 Sie 2016 16:06
    Krzysiek6kaczor
    Poziom 5  

    zmieniłem kod jak sugerowałeś ale nadal błąd wyrzuca

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #4 24 Sie 2016 21:13
    clubs
    Poziom 29  

    Witam

    Jeżeli Source to skoroszyt to zrób tak

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    0
  • #5 25 Sie 2016 08:26
    Krzysiek6kaczor
    Poziom 5  

    także nie pomogło

    błąd wyrzuca przy lini:

    Kod: VB
    Zaloguj się, aby zobaczyć kod


    treść błędu:
    Run-time error '1004':
    Application-defined or object-defined error

    ręczne odświeżanie tabel oczywiście działa bez problemu

    0
  • #6 25 Sie 2016 13:06
    JRV
    Specjalista - VBA, Excel

    Jak jest jedna tabelka na arkuszy, sprobuj

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    IMHO BackgroundQuery dotyczy do QueryTable

    0
  • #7 26 Sie 2016 08:59
    Krzysiek6kaczor
    Poziom 5  

    dziękuję za podpowiedź ale nie pomogło niestety, gdzieś znalazłem sugestię że with może powodować problem ale to też zły trop
    sprawdziłem ręcznie nagrywając makro, po kliknięciu w zakładce dane odśwież nagrało się makro
    i to zadziałało

    Kod: VB
    Zaloguj się, aby zobaczyć kod

    niby problem to rozwiązuje, ale ciekaw jestem dlaczego pojedyńczej tabeli nie mogę odświeżyć
    napisałem jeszcze coś takiego:
    Kod: VB
    Zaloguj się, aby zobaczyć kod

    i dla pierwszego arkusza się udało, ale dla 2 już makro zwróciło błąd:
    run-time error '91'
    object variable or with block variable not set
    i nie rozumiem.
    wszystkie arkusze w k są identyczne, zawierają tylko tabelę z SQL ściągniętą za pomocą Dane\Z innych źródeł\Z programu SQL Server
    natomiast dla pierwszego "i" instrukcja:
    Kod: VB
    Zaloguj się, aby zobaczyć kod

    zwraca nazwę tabeli w tym arkuszu
    dla drugiego "i" instrukcja zwraca błąd '91'

    bardzo bym chciał zrozumieć dlaczego

    Dodano po 26 [minuty]:

    oj pośpieszyłem się
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    nie do końca rozwiązuje problem
    wyskakuje okienko z pytaniem czy przerwać odświeżanie tabeli, ponieważ następna już chce się odświeżać
    a nie chcę wyłączać powiadomień bo nie wiem co się wtedy wydarzy
    czy zostanie przerwane odświeżanie

    czy może wie ktoś jak sprawdzić jakie obiekty występują w arkuszu?
    myślę że to mogłoby mnie naprowadzić na właściwe rozwiązanie, ale nie wiem jak to sprawdzić

    0
  • #8 27 Sie 2016 06:55
    adamas_nt
    Moderator Programowanie

    Zastanawiam się, czy prawidłowo do tego podchodzisz. Połączenia są chyba elementami skoroszytu, nie arkuszy.

    Spróbuj przetestować

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #9 29 Sie 2016 16:08
    Krzysiek6kaczor
    Poziom 5  

    więc mam wynik
    zmienną test zmieniłem na variant, żeby przy pierwszej pętli nie było błędu
    część I:

    Cytat:
    For i = 1 To Source.Connections.Count
    'czy tutaj coś przypisze, czy błąd
    test = Source.Connections.Item(i).Name
    'i co się wydarzy jeśli
    Source.Connections.Item(1).Refresh
    Next

    zliczyła prawidłowo połączenia
    i przepisała ich nazwy, ale odświeżanie tabel nie odbyło się
    część II zwróciła błąd przy pierwszym i
    Cytat:
    For i = 0 To UBound(k)
    Source.Sheets(k(i)).Select
    'czy tutaj coś przypisze, czy błąd
    test = Source.Sheets(k(i)).ListObject.Count
    Next

    nadal nie mam pojęcia jak odświeżyć tabele,
    co jeszcze mogę spróbować?

    0
  • #10 15 Wrz 2016 12:26
    Krzysiek6kaczor
    Poziom 5  

    witam
    rozwiązałem problem, chociaż się niczego nie nauczyłem, nadal nie wiem jak to z poziomu vba zrobić
    użyłem instrukcji

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    i zmieniłem w "Właściwości połączenia"
    zakładka "Użycie"
    odczekowałem "Włącz odświeżanie w tle"
    wszystkie tabele się odświeżają, i instrukcja czeka z rozpoczęciem odświeżania następnej tabeli, aż odświeżanie pierwszej zostanie zakończone
    więc mój problem jest rozwiązany

    0