2016-12-08 8 views
0

BeforeSaveイベントを使用してコードを実行するブック( "CodeBook.xlsm")があります。ユーザーが複数のワークブックを開いていてファイル/終了でExcelを終了することを選択すると、ワークブックを保存するかどうかを確認するメッセージが表示され、はいの場合はBeforeSaveコードが実行されます。問題は、その時点でActiveWorkbookは、ユーザーがExcelの終了を選択したときのワークブックでない限り、CodeBook.xlsmではない可能性があります。ユーザーが別のブックからExcelを終了すると、BeforeSaveコードが実行されていますが、アクティブワークブックはユーザーのランダムなファイルなので、BeforeSaveコードの特定のワークシートおよび範囲への参照はすべて機能しません。VBA以外のExcelで特定のブックをアクティブにする方法

私はCodeBookとworkbook()の名前を保持するために静的宣言を使用して様々な方法を試しましたが、アプリケーションを終了するときにactivateすることでBeforeSaveを実行すると、名前をコードにハードコードするのには不十分です。

提案がありますか?実行中のコードがないときに変数名を保持する方法、ユーザーが終了するときに変数を保存する方法、またはExcelがapplication.quitではなくユーザーコマンドから終了するときに特定のブックをアクティブにする方法。 using excel 2010.

+1

VBAは、特定のブックに取り付けられ、このブックがアクティブであるときアクティブとアクセス可能となります。同じイベントに同じ名前の2つの関数があり、1つはワークブック「A」に属し、もう1つはワークブック「B」に属するとします。これは合法ですか?もちろん!!!一貫性を維持するために、** Excelの現在の範囲**はアクティブなワークブックのものです。私が考えることができる唯一の解決策は、Excelを開くとすぐに(ファイルの有無にかかわらず)アクセス可能なExcel自体にプラグインを構築することです。 – FDavidov

答えて

0

特定のワークブックへの参照を含めることでこれを克服しました。

たとえば、このコードでは、文書を閉じる前に、A1のセルに日付/時刻スタンプを保存します。Sheet1ThisWorkbookを追加することにより、コードが存在する特定のブックで動作します。ThisWorkbookを追加しないと、ユーザーが終了するとアクティブブックで機能します。

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = Now() 
End Sub 

プレイスThisWorkbookモジュールでこのコード。

enter image description here

関連する問題