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.