Note: The other languages of the website are Google-translated. Back to English

Jak zapisać i zamknąć skoroszyt po pewnym okresie braku aktywności?

Czasami możesz przypadkowo zamknąć skoroszyt, gdy jesteś zajęty innymi sprawami przez długi czas, co może spowodować utratę niektórych ważnych danych w skoroszycie. Czy są jakieś sztuczki, aby automatycznie zapisywać i zamykać skoroszyt, jeśli dezaktywowałeś go przez określony czas?

Automatycznie zapisuj i zamykaj skoroszyt po braku aktywności przez określony czas z VBA

strzałka niebieski prawy bąbelek Automatycznie zapisuj i zamykaj skoroszyt po braku aktywności przez określony czas z VBA

W programie Excel nie ma wbudowanej funkcji, która rozwiązałaby ten problem, ale mogę wprowadzić kod makra, który może pomóc w zapisywaniu i zamykaniu skoroszytu po braku aktywności w określonym czasie.

1. Włącz skoroszyt, który chcesz automatycznie zapisać i zamknąć po określonym czasie bezczynności i naciśnij Alt + F11 klucze do otwarcia Microsoft Visual Basic for Applications okno.

2. kliknij wstawka > Moduł stworzyć Moduł script i wklej do niego poniższy kod. Zobacz zrzut ekranu:

Dim CloseTime As Date
Sub TimeSetting()
    CloseTime = Now + TimeValue("00:00:15")
    On Error Resume Next
    Application.OnTime EarliestTime:=CloseTime, _
      Procedure:="SavedAndClose", Schedule:=True
End Sub
Sub TimeStop()
    On Error Resume Next
    Application.OnTime EarliestTime:=CloseTime, _
      Procedure:="SavedAndClose", Schedule:=False
 End Sub
Sub SavedAndClose()
    ActiveWorkbook.Close Savechanges:=True
End Sub

 

doc zapisz zamknięty skoroszyt po bezczynności 1

3. Następnie w Eksplorator projektów okienku, kliknij dwukrotnie Ten skoroszyti wklej poniższy kod do skryptu obok. Zobacz zrzut ekranu:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Call TimeStop
End Sub

Private Sub Workbook_Open()
    Call TimeSetting
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
   Call TimeStop
   Call TimeSetting
End Sub

 

doc zapisz zamknięty skoroszyt po bezczynności 2

4. Kliknij dwukrotnie moduł wstawiony w kroku 2 i naciśnij F5 klucz do uruchomienia kodu. Zobacz zrzut ekranu:
doc zapisz zamknięty skoroszyt po bezczynności 3

5. Następnie po 15 sekundach pojawi się okno dialogowe przypominające o zapisaniu skoroszytu i kliknij Tak aby zapisać i zamknąć skoroszyt.
doc zapisz zamknięty skoroszyt po bezczynności 4

Porady:

(1) W pierwszym kodzie możesz zmienić czas bezczynności na inny w tym ciągu: Now + TimeValue („00:00:15”)

(2) Jeśli nigdy wcześniej nie zapisałeś skoroszytu, plik Zapisz jako najpierw pojawi się okno dialogowe i poprosi o jego zapisanie.
doc zapisz zamknięty skoroszyt po bezczynności 5


dobry Chroń arkusz roboczy

Kutools dla Excela Chroń arkusz roboczy Funkcja może szybko chronić wiele arkuszy lub cały skoroszyt jednocześnie.
doc chroni wiele arkuszy

Najlepsze narzędzia biurowe

Kutools dla programu Excel rozwiązuje większość problemów i zwiększa produktywność o 80%

  • Ponowne użycie: Szybko włóż złożone wzory, wykresy i wszystko, czego używałeś wcześniej; Szyfruj komórki z hasłem; Utwórz listę mailingową i wysyłaj e-maile ...
  • Pasek Super Formula (łatwo edytować wiele wierszy tekstu i formuły); Układ do czytania (łatwe odczytywanie i edytowanie dużej liczby komórek); Wklej do filtrowanego zakresu...
  • Scal komórki / wiersze / kolumny bez utraty danych; Podziel zawartość komórek; Połącz zduplikowane wiersze / kolumny... Zapobiegaj zduplikowanym komórkom; Porównaj zakresy...
  • Wybierz Duplikat lub Unikalny Wydziwianie; Wybierz puste wiersze (wszystkie komórki są puste); Super Find i Fuzzy Find w wielu zeszytach ćwiczeń; Losowy wybór ...
  • Dokładna kopia Wiele komórek bez zmiany odwołania do formuły; Automatyczne tworzenie odniesień do wielu arkuszy; Wstaw punktory, Pola wyboru i nie tylko ...
  • Wyodrębnij tekst, Dodaj tekst, Usuń według pozycji, Usuń przestrzeń; Tworzenie i drukowanie podsumowań stronicowania; Konwertuj zawartość komórek i komentarze...
  • Super filtr (zapisz i zastosuj schematy filtrów do innych arkuszy); Zaawansowane sortowanie według miesiąca / tygodnia / dnia, częstotliwości i innych; Specjalny filtr pogrubieniem, kursywą ...
  • Połącz skoroszyty i arkusze robocze; Scal tabele na podstawie kluczowych kolumn; Podziel dane na wiele arkuszy; Konwersja wsadowa xls, xlsx i PDF...
  • Ponad 300 zaawansowanych funkcji. Obsługuje Office / Excel 2007-2021 i 365. Obsługuje wszystkie języki. Łatwe wdrażanie w przedsiębiorstwie lub organizacji. Pełne funkcje 30-dniowa bezpłatna wersja próbna. 60-dniowa gwarancja zwrotu pieniędzy.
karta kte 201905

Karta Office wprowadza interfejs z zakładkami do pakietu Office i znacznie ułatwia pracę

  • Włącz edycję i czytanie na kartach w programach Word, Excel, PowerPoint, Publisher, Access, Visio i Project.
  • Otwieraj i twórz wiele dokumentów w nowych kartach tego samego okna, a nie w nowych oknach.
  • Zwiększa produktywność o 50% i redukuje setki kliknięć myszką każdego dnia!
officetab dół
Sortuj komentarze według
Komentarze (11)
Brak ocen. Oceń jako pierwszy!
Ten komentarz został zminimalizowany przez moderatora na stronie
Powyższy kod nie działa, gdy komórka jest aktywna. To jest

1. wprowadź wartość w komórce (nie naciskaj Enter ani tabulator)

2. zminimalizować Excela.

W tym przypadku kod nie działa.
Ten komentarz został zminimalizowany przez moderatora na stronie
Jeśli pracujesz w osobnym skoroszycie w momencie osiągnięcia czasu zamknięcia, zamknie on ten skoroszyt, a nie ten nieaktywny. Można to rozwiązać, dostosowując kod do:

Dim CloseTime jako data
Dim WKB jako ciąg
Podrzędne ustawienie czasu()
WKB = Aktywny Skoroszyt. Nazwa
CloseTime = Teraz + TimeValue("00:00:15")
On Error Resume Next
Application.OnTime EarlyTime:=Czas zamknięcia, _
Procedura:="ZapisaneIZamknij", Harmonogram:=Prawda
End Sub
Podrzędne zatrzymanie czasu()
On Error Resume Next
Application.OnTime EarlyTime:=Czas zamknięcia, _
Procedura:="ZapisaneIZamknij", Harmonogram:=Fałsz
End Sub
Sub SavedAndClose()
Skoroszyty(WKB).Zamknij Zapisz zmiany:=True
End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
Zauważyłem to samo. I znalazłem to samo rozwiązanie :-)
Ten komentarz został zminimalizowany przez moderatora na stronie
Czasami napotykam „Błąd czasu działania”, gdy otwieram skoroszyt, w którym jest wbudowany ten kod. Tak czy inaczej napisać ten kod lepiej, aby był bardziej stabilny?
Ten komentarz został zminimalizowany przez moderatora na stronie
genialne dzięki
Ten komentarz został zminimalizowany przez moderatora na stronie
cześć chcę wstawić ten kod do innego kodu, takiego jak kod wygaśnięcia z tym kodem, jak mogę to zrobić ....?
kod jest ... następujący
Private Sub Workbook_Open ()

Wym. data jako data
Dim i As Integer

'tutaj zmień wartości daty wygaśnięcia !!!
anul = 2019 'rok
luna = 5 'miesiąc
ziua = 16 'dzień

exdate = DateSerial (anul, luna, ziua)

Jeśli Data > Przedłuż Wtedy
MsgBox ("Aplikacja " & ThisWorkbook.Name & " wygasła !" & vbNewLine & vbNewLine _
& "Data wygaśnięcia ważności to: " & exdate & " :)" & vbNewLine & vbNewLine _
& „Skontaktuj się z administratorem, aby odnowić wersję !”), vbCritical, ThisWorkbook.Name

wygasły_plik = ThisWorkbook.Path & "\" & ThisWorkbook.Name

W przypadku błędu Przejdź do obsługi błędów
Ze skoroszytami(ThisWorkbook.Name)
Jeśli .Path <> "" Wtedy

.Zapisane = Prawda
.ChangeFileAccess xl Tylko do odczytu

Zabij wygasły_plik

'uzyskaj nazwę dodatku, jeśli jest to dodatek i odinstaluj dodatek
Jeśli aplikacja.Wersja >= 12 Wtedy
i = 5
W przeciwnym razie: ja = 4
End If

If Right(ThisWorkbook.Name, i) = ".xlam" Or Right(ThisWorkbook.Name, i) = ".xla" Then
wbName = Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - i)
'odinstaluj dodatek, jeśli jest zainstalowany
Jeśli AddIns(wbName).Installed Then
AddIns(wbName).Installed = Fałsz
End If
End If

.Blisko

End If
Kończyć z

Exit Sub

End If

'MsgBox ("Masz" i exdate - Data i "Pozostało dni")
Exit Sub

ErrorHandler:
MsgBox "Nie udało się usunąć pliku... "
Exit Sub

End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
Jeśli pracujesz w osobnym skoroszycie w momencie osiągnięcia czasu zamknięcia, zamknie on ten skoroszyt, a nie ten nieaktywny. Można to rozwiązać, dostosowując kod do: - poprawionego i przetestowanego z poniższego komentarza - użyj tego kodu:

Wejdź do „Tego skoroszytu”

Prywatny skoroszyt pomocniczy_BeforeClose (Anuluj jako Boolean)
Zatrzymaj czas połączenia
End Sub
Private Sub Workbook_Open ()
Ustawienie czasu połączenia
End Sub
Private Sub Workbook_SheetChange (ByVal Sh jako obiekt, ByVal Target jako zakres)
Zatrzymaj czas połączenia
Ustawienie czasu połączenia
End Sub


Wejdź do "modułu":

Dim CloseTime jako data
Podrzędne ustawienie czasu()
CloseTime = Teraz + TimeValue("00:10:00")
On Error Resume Next
Application.OnTime EarlyTime:=Czas zamknięcia, _
Procedura:="ZapisaneIZamknij", Harmonogram:=Prawda
End Sub
Podrzędne zatrzymanie czasu()
On Error Resume Next
Application.OnTime EarlyTime:=Czas zamknięcia, _
Procedura:="ZapisaneIZamknij", Harmonogram:=Fałsz
End Sub
Sub SavedAndClose()
ThisWorkbook.Close Zapisz zmiany:=True
End Sub


możesz zmienić ustawienie czasu, zmieniając CloseTime = Now + TimeValue("00:10:00") - jest to ustawione na 10 minut, zmień("00:10:00") na dowolny czas i działa.
Ten komentarz został zminimalizowany przez moderatora na stronie
Nie jestem pewien, co się stało, ale to rozwiązanie już nie działa. Oto poprawka tego rozwiązania, które zadziałało dla mnie:

`````
Resetowanie przyciemnienia Odliczaj tak długo

Skoroszyt podrzędny publiczny_Open()
On Error Resume Next
Ustaw xWB = Ten Zeszyt
zresetuj licznik = 0
End Sub

Private Sub Workbook_SheetChange (ByVal Sh jako obiekt, ByVal Target jako zakres) W przypadku błędu Wznów Dalej
Zresetuj
End Sub

Sub Reset() W przypadku błędu Wznów Dalej
Statyczny xZamknijCzas
Jeśli resetCount <> 0 Wtedy
ThisWorkbook.Application.OnTime xCloseTime, „SaveWork1”, Schedule:=False
resetCount = resetCount + 1
xCloseTime = DateAdd("n", 15, teraz)
ThisWorkbook.Application.OnTime xCloseTime, "SaveWork1", Schedule:=True

Więcej
resetCount = resetCount + 1
xCloseTime = DateAdd("n", 15, teraz)
ThisWorkbook.Application.OnTime xCloseTime, "SaveWork1", Schedule:=True
End If
End Sub
`````
Używa tego samego SaveWork1 As:
````Sub ZapiszPraca1()
Application.DisplayAlerts = False
ThisWorkbook.Zapisz
Ten skoroszyt. Zamknij

Application.DisplayAlerts = True
End Sub

`````
Ten komentarz został zminimalizowany przez moderatora na stronie
To jest świetne. Jakieś wskazówki dotyczące dodawania wyskakującego okienka komunikatu, które ostrzeże użytkownika, że ​​arkusz zaraz się zamknie, i da mu możliwość zresetowania licznika czasu?
Ten komentarz został zminimalizowany przez moderatora na stronie
Kiedy nie chcę edytować, a chcę tylko skonsultować, plik nadal się zamyka. Nie powinno się zamykać. Powinno się wznowić liczenie, gdy zaznaczę komórki. Jakie jest rozwiązanie?
Ten komentarz został zminimalizowany przez moderatora na stronie
Kiedy nie chcę edytować, a chcę tylko skonsultować, plik nadal się zamyka. Nie powinno się zamykać. Powinno się wznowić liczenie, gdy zaznaczę komórki. Jakie jest rozwiązanie?
Nie ma tu jeszcze żadnych komentarzy
Zostaw swój komentarz
Publikowanie jako gość
×
Oceń ten post:
0   Postacie
Sugerowane lokalizacje

Bądż na bieżąco

Prawa autorskie © 2009 - www.extendoffice.com. | Wszelkie prawa zastrzeżone. Zasilany przez ExtendOffice, | Mapa strony
Microsoft i logo Office są znakami towarowymi lub zastrzeżonymi znakami towarowymi Microsoft Corporation w Stanach Zjednoczonych i / lub innych krajach.
Chronione przez Sectigo SSL