Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

VBA Excel - ScreenUpdating działa w 2013, w 2007 nie działa

mig2x 16 Paź 2017 14:15 486 5
  • #1 16 Paź 2017 14:15
    mig2x
    Poziom 2  

    Dzień dobry

    Napisałem makra w Excel 2013. Do przyspieszenia działania makr używam ScreenUpdating. Wszystko działa doskonale w wersji 2013.
    Koledzy mają Excela 2007. Uruchamiają mój arkusz przez sieć. Makra działają poprawnie, ale powoli, jakby ScreenUpdating nie działało.
    Tak samo jest, gdy zapiszę arkusz jako xls w trybie zgodności, jak i jako xlsm.
    Od czego zależy działanie ScreenUpdating?

    0 5
  • #3 17 Paź 2017 06:50
    mig2x
    Poziom 2  

    Zaznaczeń prawie nie ma, operuję na nazwach komórek. Ponieważ obliczenia są rekurencyjne, spowolnienie, zwłaszcza na wolniejszych komputerach jest osłabiające, dlatego szukam pomocy.

    0
  • #4 17 Paź 2017 12:18
    Maciej Gonet
    Poziom 31  

    Nie znamy Twojego problemu obliczeniowego, ale jeśli to są głównie obliczenia, a nie praca z ekranem, to może lepiej pracować na tablicach zamiast na komórkach i dopiero końcowy wynik wyświetlić w arkuszu. To jest z reguły dużo szybsze.

    0
  • #5 17 Paź 2017 19:16
    lanzul
    Poziom 21  

    mig2x napisał:
    operuję na nazwach komórek. Ponieważ obliczenia są rekurencyjne, spowolnienie, zwłaszcza na wolniejszych komputerach jest osłabiające

    W jakim znaczeniu ? ... nazw zdefiniowanych w arkuszu ? Jeśli tak, to są tam pewnie wzory "automatyzujące" obliczenia, na ogół do dynamicznego wyznaczania zakresów obszarów z danymi. Pierwsze źródło obciążeń, bo jeśli używa się do obliczeń działania poprzez kod, to tu znakomicie sobie można poradzić bez funkcji ... w większości przypadków ... i może dochodzi do dublowania się działań kodu i funkcji arkuszowych ?
    Nie wiemy, bo nie ma żadnego przykładu, ile tam jest wzorów (i jakich) w komórkach i czy owa rekurencja tyczy się tylko funkcji arkuszowych, czy również i "funkcji" stosowanych w modułach vba - tutaj to "chyba tylko raczej" stosuje się ją do sprawdzania plików w katalogach (?), które są w podkatalogach, które są w ... itd. ... :) ..., chyba że kolega ma jakieś wyjątkowo silnie sprecyzowane, ukierunkowane i specyficzne działanie kodu vba, być może z UDF i to jakimiś "bardziej poważnymi".
    Wydaje się, że arkusz najbardziej spowalniają funkcje arkuszowego wyznaczania położenia, zwłaszcza "Wyszukaj.pionowa i poziomo". Może trzeba by je było (jeśli występują) stosować poprzez przypisania funkcji arkuszowych w vba do zmiennych ("bezpośrednio" lub poprzez metodę 'evaluate') i operować już ich wynikami ?
    Dodatkowo, przecież sama "masa" wzorów, jeśli jest ich "dużo" w arkuszu robi swoje, może trzeba czasowo odroczyć przeliczanie arkuszy ze wzorami ?

    Maciej Gonet napisał:
    jeśli to są głównie obliczenia, a nie praca z ekranem, to może lepiej pracować na tablicach zamiast na komórkach i dopiero końcowy wynik wyświetlić w arkuszu

    Ano właśnie, "święte słowa" ...
    Poniżej, już przysłowiowy chyba, przykład (oczywiście internetowy ... :->) obrazujący szybkość działania w tablicach i poza nimi - a i tak bazujący na "niecałkowitym" "funkcjowaniu" (to od funkcji, nie od funkcjonowania) w komórkach arkusza, bo wstawiane są tam tylko wyniki obliczeń, ale dwiema różnymi metodami, tablicową i "krokowo-schodkowo-wtykająco-liczącą" ... :)
    Nawet na tak niedużym zakresie arkusza widoczne są różnice szybkości.
    Test szyb..ci.txt Download (865 bajtów)

    0
  • #6 14 Lis 2017 11:23
    mig2x
    Poziom 2  

    Bardzo przepraszam, że długo nie reagowałem na Wasze dociekania i podpowiedzi. Wszystkie powyższe sztuczki są mi znane i stosowane.
    Problem okazał się błahy, wręcz niegodny zajmowania Wam czasu.
    Ponieważ każda z procedura lub funkcja służy do rozwiązania jakiegoś problemu, a są one używane także do rozwiązywania problemów bardziej złożonych, o złożoności, których decyduje użytkownik, każda z nich ma swoje ScreenUpdating = True dodatkowo uwarunkowane.
    Włączyłem pułapki we wszystkich miejscach załączania odświeżania ekranu. Okazało się, że w funkcjach rekurencyjnych zachodzą przypadki, że odświeżanie ekranu włącza się. Trzeba było poprawić rekurencje i warunki - to rozwiązało sprawę.

    Tym samym teza, że ww. funkcja działa w E.2013 a w E.2007 nie, jest błędna. Tym samym zamykam temat, który okazał się moją ograniczoną wyobraźnią odnośnie przebiegu obliczeń.

    0
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo