[PROBLEM] Ciągłe otwieranie się Arkusza Kalkulacyjnego

Anonimowe
2025-02-03T12:34:33+00:00

Cześć,

proszę o pomoc w rozwiązaniu niniejszego problemu:

Stworzyłem Szablon Arkusza Kalkulacyjnego zawierający poniższe makra służące do autozapisu, a także monitorowania aktywności Użytkowników, w sytuacji, gdy mam otwarte więcej niż jeden Arkusz Kalkulacyjny to ciągle ten zawierające makro otwiera, próbowałem rozwiązać to w formie wstrzymaj_AUTOSAVE(), pomimo tego, że gdy wyzwalam je samodzielnie to na Debug.Print jak sobie sprawdzałem działa wszystko prawidłowo, tzn. nie wskazuje, że OnTime jest aktywne, ale w sytuacji, gdy wyzwalane jest ono na Workbook_BeforeClose(), bądź Workbook_Deactivate() wydaje się jakby nie funkcjonowało, ponieważ dalej przywraca plik.

**WORKBOOK:**Private Sub Workbook_Open()

Application.ScreenUpdating = False 

AUTORYZACJA.autoryzuj\_OPEN 

AUTOZAPIS.rozpocznij\_AUTOSAVE 

CZYSZCZENIE.wyczyść\_TREŚĆ\_\_\_SZUKAJ 

DEZAKTYWACJA.dezaktywuj\_OPEN 

NIEAKTYWNOŚĆ.rozpocznij\_CZASOMIERZ 

ŚCIEŻKA\_AUDYTOWA.notuj\_SESJA\_OTWARTA 

End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

DEZAKTYWACJA.dezaktywuj\_OPEN 

End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

DEZAKTYWACJA.dezaktywuj\_ZAZNACZENIE Target 

MONITORING.monitoruj\_WARTOŚĆ Target 

NIEAKTYWNOŚĆ.przywróć\_CZASOMIERZ 

End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

MONITORING.monitoruj\_ZMIANA Target 

NIEAKTYWNOŚĆ.przywróć\_CZASOMIERZ 

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

AUTOZAPIS.wstrzymaj\_AUTOSAVE 

NIEAKTYWNOŚĆ.wstrzymaj\_CZASOMIERZ 

AKTYWACJA.aktywuj\_BEFORE\_CLOSE 

ŚCIEŻKA\_AUDYTOWA.notuj\_SESJA\_ZAMKNIĘTA 

ThisWorkbook.Save 

Application.ScreenUpdating = True 

End Sub

Private Sub Workbook_Deactivate()

ThisWorkbook.Save 

AUTOZAPIS.wstrzymaj\_AUTOSAVE 

NIEAKTYWNOŚĆ.wstrzymaj\_CZASOMIERZ 

AKTYWACJA.aktywuj\_WSTĄŻKA 

AKTYWACJA.aktywuj\_BEFORE\_CLOSE 

End Sub

Private Sub Workbook_Activate()

AUTOZAPIS.rozpocznij\_AUTOSAVE 

NIEAKTYWNOŚĆ.rozpocznij\_CZASOMIERZ 

DEZAKTYWACJA.dezaktywuj\_OPEN 

End Sub

MODUŁ AKTYWACJA:
Public autosaveIndicator As Date

Sub rozpocznij_AUTOSAVE()

    autosaveIndicator = Now + TimeValue("00:00:30") 

    Application.OnTime autosaveIndicator, "AUTOZAPIS.monitoruj\_CZAS" 

End Sub

Sub monitoruj_CZAS()

On Error Resume Next 

ThisWorkbook.Save 

AUTOZAPIS.rozpocznij\_AUTOSAVE 

End Sub

Sub wstrzymaj_AUTOSAVE()

On Error Resume Next 

Application.OnTime EarliestTime:=autosaveIndicator, Procedure:="AUTOZAPIS.monitoruj\_CZAS", Schedule:=False 

autosaveIndicator = 0 

MsgBox "wstrzymaj\_AUTOSAVE() funkcjonuje prawidłowo!" 

End Sub

MODUŁ NIEAKTYWNOŚĆ:
Dim idleTimeout As Double

Dim lastActive As Double

Dim idleIndicator As Boolean

Public idleEvent As Date

Sub monitoruj_AKTYWNOŚĆ()

If Timer - lastActive > idleTimeout Then 

    ŚCIEŻKA\_AUDYTOWA.notuj\_BEZCZYNNOŚĆ 

    ThisWorkbook.Save 

    ThisWorkbook.Close 

Else 

    idleEvent = Now + TimeValue("00:00:30") 

    Application.OnTime idleEvent, "NIEAKTYWNOŚĆ.monitoruj\_AKTYWNOŚĆ" 

End If 

End Sub

Sub rozpocznij_CZASOMIERZ()

' ZDEFINIUJ idleTimeout = (...) 

idleTimeout = 300 

lastActive = Timer 

idleEvent = Now + TimeValue("00:00:30") 

Application.OnTime idleEvent, "NIEAKTYWNOŚĆ.monitoruj\_AKTYWNOŚĆ" 

End Sub

Sub przywróć_CZASOMIERZ()

lastActive = Timer 

End Sub

Sub wstrzymaj_CZASOMIERZ()

On Error Resume Next 

Application.OnTime EarliestTime:=idleEvent, Procedure:="NIEAKTYWNOŚĆ.monitoruj\_AKTYWNOŚĆ", Schedule:=False 

idleEvent = 0 

Debug.Print "WSTRZYMANO" 

End Sub

Microsoft 365 i pakiet Office | Excel | Do użytku biznesowego | Windows

Pytanie zablokowane. To pytanie zostało zmigrowane ze społeczności pomocy technicznej firmy Microsoft. Możesz zagłosować, czy pytanie jest pomocne, ale nie możesz dodawać komentarzy ani odpowiedzi, ani też śledzić pytania.

Komentarze: 0 Brak komentarzy