Rodzina oprogramowania do obsługi arkuszy kalkulacyjnych firmy Microsoft z narzędziami do analizowania, tworzenia wykresów i wymiany danych
[PROBLEM] Ciągłe otwieranie się Arkusza Kalkulacyjnego
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.