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

閒置一定時間後如何保存和關閉工作簿?

有時,當您長時間忙於其他事務時,可能會意外關閉工作簿,這可能會丟失工作簿中的一些重要數據。 如果您在一定時間內將其禁用,是否有任何技巧可以自動保存和關閉工作簿?

VBA在一段時間不活動後自動保存並關閉工作簿

箭頭藍色右氣泡 VBA在一段時間不活動後自動保存並關閉工作簿

Excel中沒有內置函數可以解決此問題,但是我可以介紹一個宏代碼,該代碼可以幫助您在一段時間內不活動後保存和關閉工作簿。

1.啟用要自動保存並在閒置幾秒鐘後關閉的工作簿,然後按 Alt + F11鍵 打開鑰匙 Microsoft Visual Basic for Applications 窗口。

2。 點擊 插入 > 模塊 創造一個 模塊 腳本,然後將以下代碼粘貼到該腳本。 看截圖:

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不活動後保存關閉工作簿1

3.然後在 項目瀏覽器 窗格,雙擊 本工作簿,然後將以下代碼粘貼到next腳本中。 看截圖:

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不活動後保存關閉工作簿2

4.雙擊在步驟2中插入的模塊,然後按 F5 鍵來運行代碼。 看截圖:
doc不活動後保存關閉工作簿3

5.然後在15秒鐘後彈出一個對話框,提醒您保存工作簿,然後單擊 保存並關閉工作簿。
doc不活動後保存關閉工作簿4

提示:

(1)在第一個代碼中,您可以在此字符串中將不活動時間更改為其他時間: 現在+ TimeValue(“ 00:00:15”)

(2)如果您以前從未保存過工作簿,則 另存為 對話框將首先出現,並要求您保存它。
doc不活動後保存關閉工作簿5


好 保護工作表

Kutools for Excel的 保護工作表 該功能可以一次快速保護多張紙或整個工作簿。
doc保護多個工作表

最佳辦公效率工具

Kutools for Excel 解決了你的大部分問題,並將你的生產力提高了 80%

  • 重用: 快速插入 複雜的公式,圖表 以及您以前使用過的任何東西; 加密單元 帶密碼 創建郵件列表 並發送電子郵件...
  • 超級公式欄 (輕鬆編輯多行文本和公式); 閱讀版式 (輕鬆讀取和編輯大量單元格); 粘貼到過濾範圍...
  • 合併單元格/行/列 不會丟失數據; 拆分單元格內容; 合併重複的行/列...防止細胞重複; 比較範圍...
  • 選擇重複或唯一 行; 選擇空白行 (所有單元格都是空的); 超級查找和模糊查找 在許多工作簿中; 隨機選擇...
  • 確切的副本 多個單元格,無需更改公式參考; 自動創建參考 到多張紙; 插入項目符號,複選框等...
  • 提取文字,添加文本,按位置刪除, 刪除空間; 創建和打印分頁小計; 在單元格內容和註釋之間轉換...
  • 超級濾鏡 (將過濾方案保存並應用於其他工作表); 高級排序 按月/週/日,頻率及更多; 特殊過濾器 用粗體,斜體...
  • 結合工作簿和工作表; 根據關鍵列合併表; 將數據分割成多個工作表; 批量轉換xls,xlsx和PDF...
  • 超過 300 項強大的功能. 支持 Office / Excel 2007-2021 和 365。支持所有語言。 在您的企業或組織中輕鬆部署。 完整功能 30 天免費試用。 60 天退款保證。
kte選項卡201905

Office選項卡為Office帶來了選項卡式界面,使您的工作更加輕鬆

  • 在Word,Excel,PowerPoint中啟用選項卡式編輯和閱讀,發布者,Access,Visio和Project。
  • 在同一窗口的新選項卡中而不是在新窗口中打開並創建多個文檔。
  • 將您的工作效率提高 50%,每天為您減少數百次鼠標點擊!
officetab底部
按評論排序
留言 (11)
還沒有評分。 成為第一位評論!
網站主持人對此評論進行了最小化
當單元格處於活動狀態時,上述代碼不起作用。 那是

1. 在單元格中輸入一個值(不要按 Enter 或 Tab)

2.最小化excel。

在這種情況下,代碼不起作用。
網站主持人對此評論進行了最小化
如果您在達到關閉時間時在單獨的工作簿中工作,那麼它將關閉該工作簿而不是非活動的工作簿。 這可以通過將代碼調整為:

將 CloseTime 暗淡為日期
將 WKB 變暗為字符串
子時間設置()
WKB = ActiveWorkbook.名稱
CloseTime = 現在 + TimeValue("00:00:15")
在錯誤恢復下一頁
Application.OnTime EarliestTime:=CloseTime, _
程序:=“SavedAndClose”,計劃:=True
END SUB
子 TimeStop()
在錯誤恢復下一頁
Application.OnTime EarliestTime:=CloseTime, _
程序:=“SavedAndClose”,計劃:=假
END SUB
子 SavedAndClose()
工作簿(WKB)。關閉 Savechanges:=True
END SUB
網站主持人對此評論進行了最小化
我注意到了同樣的事情。 並找到了相同的解決方案:-)
網站主持人對此評論進行了最小化
打開內置此代碼的工作簿時,我有時會遇到“運行時錯誤”。 無論如何要更好地編寫此代碼以使其更穩定?
網站主持人對此評論進行了最小化
非常感謝
網站主持人對此評論進行了最小化
嗨,我想將此代碼插入到其他代碼中,例如帶有此代碼的到期代碼,我該怎麼做......?
代碼是...以下
私人子工作簿_打開()

將 exdate 暗淡為日期
昏暗我作為整數

'在這裡修改過期日期的值!!!
anul = 2019 '年
luna = 5'月
ziua = 16 '天

exdate = DateSerial(anul, luna, ziua)

If Date > exdate Then
MsgBox ("應用程序 " & ThisWorkbook.Name & " 已過期!" & vbNewLine & vbNewLine _
& "到期設置日期為:" & exdate & " :)" & vbNewLine & vbNewLine _
& "聯繫管理員更新版本!"), vbCritical, ThisWorkbook.Name

expired_file = ThisWorkbook.Path & "\" & ThisWorkbook.Name

出錯時轉到 ErrorHandler
使用工作簿(ThisWorkbook.Name)
如果 .Path <> "" 那麼

.已保存 = 真
.ChangeFileAccess xlReadOnly

殺死過期文件

'如果是addin和unistall addin,則獲取插件的名稱
如果 Application.Version >= 12 那麼
I = 5
否則:i = 4
如果結束

如果 Right(ThisWorkbook.Name, i) = ".xlam" 或 Right(ThisWorkbook.Name, i) = ".xla" 那麼
wbName = Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - i)
'如果已安裝插件,請卸載
如果 AddIns(wbName).Installed 那麼
AddIns(wbName).Installed = False
如果結束
如果結束

。關

如果結束
結束

退出小組

如果結束

'MsgBox ("你有 " & exdate - 日期 & "剩余天數")
退出小組

的ErrorHandler:
MsgBox "刪除文件失敗.. "
退出小組

END SUB
網站主持人對此評論進行了最小化
如果您在達到關閉時間時在單獨的工作簿中工作,那麼它將關閉該工作簿而不是非活動的工作簿。 這可以通過調整代碼來解決: - 從下面的評論中更正和測試 - 使用此代碼:

進入“本工作簿”

Private Sub Workbook_BeforeClose(取消為布爾值)
呼叫 TimeStop
END SUB
私人子工作簿_打開()
通話時間設置
END SUB
私有子工作簿_SheetChange(ByVal Sh 作為對象,ByVal 目標作為範圍)
呼叫 TimeStop
通話時間設置
END SUB


進入“模塊”:

將 CloseTime 暗淡為日期
子時間設置()
CloseTime = 現在 + TimeValue("00:10:00")
在錯誤恢復下一頁
Application.OnTime EarliestTime:=CloseTime, _
程序:=“SavedAndClose”,計劃:=True
END SUB
子 TimeStop()
在錯誤恢復下一頁
Application.OnTime EarliestTime:=CloseTime, _
程序:=“SavedAndClose”,計劃:=假
END SUB
子 SavedAndClose()
ThisWorkbook.Close 保存更改:=True
END SUB


您可以通過更改 CloseTime = Now + TimeValue("00:10:00") 來更改時間設置 - 這設置為 10 分鐘,將 ("00:10:00") 更改為您想要的任何時間並且它可以工作。
網站主持人對此評論進行了最小化
我不確定發生了什麼,但這個解決方案不再有效。 這是對我有用的此解決方案的修復:

````
暗淡 resetCount As Long

公共子工作簿_Open()
在錯誤恢復下一頁
設置 xWB = ThisWorkbook
重置計數 = 0
END SUB

Private Sub Workbook_SheetChange(ByVal Sh As Object,ByVal Target As Range)錯誤繼續下一步
重設
END SUB

Sub Reset()On Error Resume Next
靜態 xCloseTime
如果 resetCount <> 0 則
ThisWorkbook.Application.OnTime xCloseTime, "SaveWork1", Schedule:=False
重置計數 = 重置計數 + 1
xCloseTime = DateAdd("n", 15, 現在)
ThisWorkbook.Application.OnTime xCloseTime, "SaveWork1", Schedule:=True

其他
重置計數 = 重置計數 + 1
xCloseTime = DateAdd("n", 15, 現在)
ThisWorkbook.Application.OnTime xCloseTime, "SaveWork1", Schedule:=True
如果結束
END SUB
````
這是使用相同的 SaveWork1 As:
````子SaveWork1()
Application.DisplayAlerts = False
ThisWorkbook.保存
ThisWorkbook.關閉

Application.DisplayAlerts = True
END SUB

````
網站主持人對此評論進行了最小化
這很棒。 關於添加彈出消息框以警告用戶工作表即將關閉並為他們提供重置計時器的選項的任何提示?
網站主持人對此評論進行了最小化
當我不想編輯而只想諮詢時,文件仍然關閉。 它不應該關閉。 當我選擇單元格時應該重新開始計數。 解決辦法是什麼?
網站主持人對此評論進行了最小化
當我不想編輯而只想諮詢時,文件仍然關閉。 它不應該關閉。 當我選擇單元格時應該重新開始計數。 解決辦法是什麼?
這裡還沒有評論
請用英文發表您的意見
以訪客身份發帖
×
評價此帖子:
0   字符
推薦地點

關注我們

版權所有©2009 - 萬維網。extendoffice.com。 | 版權所有。 供電 ExtendOffice。 |
Microsoft和Office徽標是Microsoft Corporation在美國和/或其他國家的商標或註冊商標。
受Sectigo SSL保護