2017-09-14 11 views
0

私はちょっとした問題があります。私が持っている複数の開いているExcelのインスタンスの1つを閉じるとき閉じるコードが実行される前

私はこの小さな問題を除いてほぼ完全に実行されるすべてのコードでマクロブック(簡略化のために「メイン」と呼ぶことができます)を持っています。 「メイン」は通常、その日の残高であるため、常に開いています。

私が開いたときと同じときに他のユーザーがブックを開くと、すべての問題はなくなりますが、コードがないブックを閉じると、「メイン」は終了コードより前に実行されます。

だから、これは私が "メイン" に持って閉じるコードの前に私のです:SaveWb上

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 

とコード:

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 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」を実行しようとすると、エラーが表示されます。

理論的には各インスタンスが単独で実行されるため、またユーザーが閉じるボタントップでこれらの他のブックを閉じていても、「メイン」を閉じるわけではないので、そのブックは開いたままです。他のアイデアは、ブックが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 
関連する問題