2017-09-14 43 views
0

當我遇到一個有點奇怪的問題時。當我關閉其中一個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」,但我還沒有找到編碼的方法。

非常感謝您的幫助!

+0

你有沒有考慮在BeforeClose分開始檢查工作簿的名稱?另外,ThisWorkbook是什麼?它是ActiveWorkbook的別名嗎? –

+1

@MaciejLipinski'ThisWorkbook'是一個內置對象,指向包含宏的工作簿。 – YowE3K

+0

@ YowE3K謝謝,我不知道 - 我總是使用ActiveWorkbook或通過其文件名 –

回答

0

我找到了解決此問題的方法。謝謝大家幫助我達成這個想法。

Basicly我所做的是在的開始前關閉添增如果條款:

If ActiveWorkbook.Name Like "ReportingReport*" Then 
(code) 
Else SaveWb 
End If