Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla 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

24 Sie 2016 10:15 1884 9
  • Poziom 6  
    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ć?
  • 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))
  • Poziom 6  
    zmieniłem kod jak sugerowałeś ale nadal błąd wyrzuca

    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Poziom 34  
    Witam

    Jeżeli Source to skoroszyt to zrób tak

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod
  • Poziom 6  
    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
  • Specjalista - VBA, Excel
    Jak jest jedna tabelka na arkuszy, sprobuj
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    IMHO BackgroundQuery dotyczy do QueryTable
  • Poziom 6  
    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ć
  • 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
  • Poziom 6  
    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ć?
  • Poziom 6  
    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