• 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.

Aruba Cloud - Virtual Private Server VPS
+1 głos
470 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 (256,600 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 324 wizyt
pytanie zadane 26 listopada 2020 w Visual Basic przez ZenekMarjewka Nowicjusz (120 p.)
0 głosów
1 odpowiedź 277 wizyt
pytanie zadane 1 września 2022 w Visual Basic przez morking Nowicjusz (210 p.)
+1 głos
2 odpowiedzi 909 wizyt
pytanie zadane 8 listopada 2021 w Visual Basic przez Quba Użytkownik (870 p.)

93,336 zapytań

142,332 odpowiedzi

322,418 komentarzy

62,673 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...