2016-12-03 4 views
1

条件が満たされない場合、BeforeSaveイベント中にブックを閉じるしようとしています。次のコードを使用していますが、保存が予期したとおりにキャンセルされていますが、クローズイベントが異常終了します。条件が満たされない場合、BeforeSaveイベント中にワークブックを閉じるにはどうすればよいですか?

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
    If X <> Y then 
     Cancel = True 
     ThisWorkbook.Close savechanges:=False 
    End If 
End Sub 

私もそれでクローズコマンドで別のSubを呼び出そうとしていますが、ここではそれはまた同じ問題を生じ

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
    If X <> Y then 
     Cancel = True 
     ExitNoSave 
    End If 
End Sub 

Public ExitNoSave() 
    ThisWorkbook.Close savechanges:=False 
End Sub 

は私だけで新しいブックを作っコードから画面のグラブですbefore saveイベントはまだ発生します。

enter image description here

enter image description here

誰もがこれを行う方法を持っているか、BeforeSaveイベントからこれを実行することはできませんでしょうか?

+0

どのようにExcelがクラッシュするのですか? 「Excelは稼働を停止しました」 –

+0

'Workbook_BeforeSave'からcloseを呼び出すと、うまく動作します。 –

+0

ええ、それは動作を停止エクセルと私にデバッグするオプションを与える –

答えて

1

私が理解したように、AfterSaveイベントを使用してこれを実行する必要があります。そのため、BeforeSaveイベントで保存をキャンセルすると、AfterSaveイベントに失敗して保存が失敗し、異なるコード条件。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
    If 1 <> 2 Then 
     Cancel = True 
    End If 
End Sub 

Private Sub Workbook_AfterSave(ByVal Success As Boolean) 
    If Success = False Then 
     ThisWorkbook.Close savechanges:=False 
    End If 
End Sub 
関連する問題