DocumentBeforeSaveイベントハンドラー内にいくつかの機能があります。
これは、ユーザーが手動で[保存]を呼び出す([保存]ボタンを押す)場合にのみ機能するはずです。
ただし、Word 2007には自動保存機能があり、自動保存が機能するたびにイベントDocumentBeforeSaveがスローされます。自動保存を介して保存が呼び出されていること、またはユーザーが手動で保存を呼び出していることを確認するにはどうすればよいですか?
2 に答える
オブジェクトモデルが(このリンクごとに)それをサポートしていないため、これを行う組み込みの方法はないようですが、VBAを使用して、デフォルトの保存ホットキーとボタンクリックをオーバーライドし、それらの呼び出しをに送信できます。 NETアセンブリ(このリンクごと)。後で手動でsaveを呼び出して、ドキュメントが実際に保存されることを確認してください。
違いを見分ける方法は実際には複数あります。
Application.WordBasic.IsAutosaveEvent
オプション2(オプション1を見つける前に私がしたこと)
リボンからFileSave(およびFileSaveAs)コマンドをインターセプトします。
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load"> <commands> <command idMso="FileSave" onAction="SaveIntercept" /> </commands> </customUI>
SaveInterceptメソッドにフラグを設定し、CancelDefaultをfalseに設定して、保存を続行します。
public void SaveIntercept(IRibbonControl control, ref bool CancelDefault) { logger.Info("Intercepted Manual Save"); ManualSave = true; CancelDefault = false; }
また、BeforeDocument_BeforeSaveを実装し、そこでフラグを確認します。フラグが設定されている場合は手動で、そうでない場合は自動保存です(または、別のアドインから取得される可能性があります。それが機能するかどうかはわかりません)。
bool quit = !customizations.ManualSave; if (quit) { logger.Info("Autosave. Allowing Word to handle this save."); e.Cancel = false; return; } else { logger.Info("Manual save. Proceeding."); customizations.ManualSave = false; }
これには、バックステージボタン、クイックアクセスツールバーボタン、および保存ショートカット(キーボードショートカットを再定義した場合でも)による保存が含まれます。
興味深いことに、ここで説明されているように、保存後にも通知する方法があります(更新されたバージョンはここにあります)。