當我遇到一個有點奇怪的問題時。當我關閉其中一個Excel打開的實例時,在關閉代碼運行之前
所以我有一個宏工作簿(讓我們稱之爲「主」爲簡化),其所有代碼運行幾乎完美,除了這個小問題。 「主」通常總是開放的,因爲它是我們當天的餘額。
當我或其他用戶在打開其他工作簿的同時打開所有內容都很好,但是當我們關閉沒有代碼的工作簿時,「Main」會在關閉代碼之前運行它。
所以這是我關閉代碼之前我有 「主」:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Tsweep As Integer
Dim sTime As Date
If ThisWorkbook.Sheets("Coordenador").Range("O2") <> "" Then
For Tsweep = 2 To Range("Coordenador!O1048000").End(xlUp).Row
Application.OnTime EarliestTime:=Range("Coordenador!O" & Tsweep).Value,
Procedure:="CloseC", Schedule:=False
Next Tsweep
End If
CloseC
sTime = ThisWorkbook.Sheets("Coordenador").Range("P15") +
TimeValue("00:30:00")
Application.OnTime EarliestTime:=sTime, Procedure:="SaveWb", Schedule:=False
ThisWorkbook.Save
End Sub[/CODE]
這是 「CloseC」 代碼:
Sub CloseC()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Coordenador")
With ws
.Unprotect Password:=pass
.Range("O:O").ClearContents
End With
For Each Worksheet In ThisWorkbook.Worksheets
Worksheet.Protect Password:=pass
Next
ThisWorkbook.Sheets("Coordenador").Visible = xlSheetVeryHidden
ThisWorkbook.Sheets("LookupList").Visible = xlSheetVeryHidden
End Sub
和代碼上SaveWb:
Sub SaveWb()
Dim vTime As Date
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Coordenador")
ThisWorkbook.Save
vTime = Now
With ws
.Unprotect Password:=pass
.Range("P15") = vTime
.Protect Password:=pass
End With
Application.OnTime vTime + TimeValue("00:30:00"), "SaveWb"
End Sub
解釋此代碼會停止系統可能仍具有的所有OnTime運行。它清除一些單元格,保護一些表格並保存。當用戶關閉「Main」並且Excel嘗試運行「SaveWb」時出現的錯誤。
我想知道是否有辦法避免這種情況,因爲理論上,excel自己運行每個實例,即使我和/或用戶正在用關閉按鈕頂部關閉這些其他工作簿,我們也不會關閉「Main」並且該工作簿保持打開狀態。其他想法是檢查工作簿是否在5秒後仍然打開,是否要運行「SaveWb」,但我還沒有找到編碼的方法。
非常感謝您的幫助!
你有沒有考慮在BeforeClose分開始檢查工作簿的名稱?另外,ThisWorkbook是什麼?它是ActiveWorkbook的別名嗎? –
@MaciejLipinski'ThisWorkbook'是一個內置對象,指向包含宏的工作簿。 – YowE3K
@ YowE3K謝謝,我不知道 - 我總是使用ActiveWorkbook或通過其文件名 –