• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Excel, VBA - Makro uruchamiane przyciskiem spowalnia komputer.

Object Storage Arubacloud
+1 głos
365 wizyt
pytanie zadane 25 września 2020 w Visual Basic przez doeg Początkujący (430 p.)

Cześć Wszystkim!

Mam dziwny problem z makrami w Excelu.

Oczywiście kodu w finalnym pliku jest duuużo-duużo więcej. Wyciąłem tylko to co powoduje problem z którym nie wiem jak sobie poradzić (to znaczy jak zrobić to inaczej - z tym nie ma problemu, chodzi raczej o zrozumienie dlaczego tak to działa, a raczej nie działa). Ale do rzeczy:

Plik ma kilka arkuszy, a w nim trochę skomplikowanych makr i proste do nawigacji po arkuszach.

Arkusz A ma być odkryty cały czas, inne arkusze, w tym przykładowy arkusz B, po wykonaniu tego co potrzeba i przejściu na początek do arkusza A, mają zostać ukryte.

Niby nic wielkiego ale:
Po uruchomieniu makra PrzejdzDoB Excel zaczyna strasznie "mulić". Zużycie procesora wzrasta (u mnie) o jakieś 12% i pozostaje na tym poziomie.
Po powrocie do A (PrzejdzDoA) wszystko wraca do normy.

W sumie trochę to dziwne, bo to zawsze ten sam mechanizm. Co ciekawe sytuacja taka ma miejsce tylko jak te makra uruchamia się przyciskiem (niezależnie czy przycisk to wstawiony kształt, czy kontrolka).
Gdy makro uruchamia się za pomocą skrótu, albo uruchamia ręcznie ten problem nie występuje, choć kod robi co do niego należy tak jak uruchomiony przyciskiem - tyle, że bez tych skutków ubocznych.

Zauważyłem, że dodanie kolejnego warunku And arkusz.Name <> "B" do pętli powoduje, że błąd znika (No ale wtedy mamy cały czas odkryty arkusz B, a nie o to tu chodzi).

Co tu robię nie tak? Co może być przyczyną, że makro działa inaczej uruchomione przyciskiem niż uruchomione ręcznie?

Załączam kod. Plik to pusty Excel z kilkoma arkuszami. Jedna karta nazwana A inna B. Na karcie A przycisk z makrem PrzejdzDoB i odwrotnie, na karcie B przycisk z makrem PrzejdzDoA

(nie ma tu opcji dołączania plików czy jej nie widzę?)

Testowane na Excel 2019 i 2016


Option Explicit


Sub UkryjWszystkieArkusze()

    Dim arkusz As Worksheet
    For Each arkusz In Sheets
        If arkusz.Name <> "A" And arkusz.Name <> ActiveSheet.Name Then arkusz.Visible = xlSheetHidden
    Next arkusz

End Sub


Sub PrzejdzDoA()

    Sheets("A").Select
    UkryjWszystkieArkusze
    Range("D5").Select

End Sub


Sub PrzejdzDoB()

    Sheets("B").Visible = True
    Sheets("B").Select
    UkryjWszystkieArkusze
    Range("A1").Select

End Sub

Będę wdzięczny za jakiś trop.

1 odpowiedź

0 głosów
odpowiedź 26 września 2020 przez VBService Ekspert (252,780 p.)

Spróbuj podmienić kod w

Sub UkryjWszystkieArkusze()
   If Not ActiveSheet.Name = "A" Then
      ActiveSheet.Visible = False
   End If 
End Sub

pomijamy iterację po wszystkich arkusza, bo tak zrozumiałem z opisu, że zawsze otwarty jest A i ewentualnie ten na którym praujesz ActiveSheet. Mam nadzieję, że to pomoże wink (Nie używam Excel'a, piszę z głowy)

Podobne pytania

0 głosów
0 odpowiedzi 203 wizyt
pytanie zadane 26 listopada 2020 w Visual Basic przez ZenekMarjewka Nowicjusz (120 p.)
0 głosów
1 odpowiedź 188 wizyt
pytanie zadane 1 września 2022 w Visual Basic przez morking Nowicjusz (210 p.)
+1 głos
2 odpowiedzi 617 wizyt
pytanie zadane 8 listopada 2021 w Visual Basic przez Quba Użytkownik (870 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...