2013-01-07 37 views
5

私はアプリケーションオブジェクトを持つアドインを持っています。オブジェクトはWithEventsとして宣言されています。これにより、ユーザーがファイルを保存するたびに、いくつかのデータポイントを中央データベースにフラッシュすることができます。これはほとんどの場合に有効です。ただし、Excelアプリケーションを終了するユーザーが1人あり、[保存]ダイアログボックスが表示されます。保存されていないファイルでExcelを終了すると、WorkbookBeforeSaveイベントが発生しないことがわかります。Excel VBA - WorkbookBeforeSaveイベントは

強調すると、ユーザーがCTRL-Sを押すか、保存ボタンを押したときにイベントが発生することを確認しました。私は、アプリケーションを終了するとイベントが発生しないことも確認しました。

私はいくつかの回避策(たとえば10秒ごとに自動的に保存する)を考えることができますが、私はそれに夢中ではありません。誰でもこの行動を確認できますか?誰かが治療法を持っていますか?

Option Explicit 

Private WithEvents mapp As Excel.Application 

Private Sub mapp_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean) 

    ' Sanity preservation device 
    Msgbox "WorkbookBeforeSave event fired." 
    SaveSomeData Wb 

End Sub 
+0

イベントはまったく発生しますか?おそらく 'Application.enableEvents = True'を確認したい場合 – Larry

+0

はい、CTRL-Sを使用してワークブックを保存するか、リボンの保存ボタンを押すとイベントが発生します。ただし、Excel(ALT-F4)を終了すると、ファイルを保存するように求められますが、WorkbookBeforeSaveイベントは発生しません。 OnQuitやApplicationオブジェクトのようなものがあれば、それを使用します。しかし、私はそれのようなものは見ません。 – PirateGrunt

答えて

2

Before Before before CloseClose?これはより良い選択肢かもしれません。

5

Workbook_BeforeCloseルーチンとWorkbookオブジェクトのSavedプロパティを使用できます。

Private Sub Workbook_BeforeClose(Cancel As Boolean) 

    If ThisWorkbook.Saved = False Then 
     'Call save function 
    End If 

End Sub 
+0

残念ながら、BeforeCloseイベントは使用できません。ここにもう少しの背景があります:私がここに到着したとき、同じコードを持つExcelファイルが何百もありましたが、顧客ごとに別々のファイルがありました。情報のためにそれらのファイルを鉱山しようとする際に、Access dbにデータを書き込むアドインを作成しました。 BeforeCloseを使用するには、そのイベントを何百ものブックに追加する必要があります。ああ。もう1つの問題は、ワークブックがすべて約15MBのかなり大きいことです。私がそれらの10個を開くと、私は記憶がなくなります。私たちはこれを今までとは違ってやってみましょう。 – PirateGrunt

+0

あなたはそこに行くつもりのはるかに粘着的な状況のように聞こえる!質問にすべてを追加してください、私は個人的にはきちんとしたソリューションを考えることができませんが、他の人ができるかもしれません。運が良かった。 –