ボブは、マクロを使用してブック内の情報を処理しています。彼は、AutoCloseマクロを含む2番目のブックをマクロで開くことを望んでいますが、2番目のブックが閉じられたときにマクロを実行することを望んでいません。

彼は、2番目のブックのマクロを有効にせずに、最初のブックのマクロの制御下で2番目のブックを開く方法を探しています。

2番目のブックをマクロ制御で開くときに、そのマクロを無効にする方法はありません。 (手動で開いている場合は、ブックが開いているときにShiftキーを押したままにすることはできますが、マクロには役立ちません。そのキーを押す指がありません!)

ただし、いくつかの回避策があります。 1つ目は、2番目のブックを閉じるコードを次のように変更することです。

Application.EnableEvents = False Workbooks("SecondBook.xls").Close Application.EnableEvents = True

EnableEventsプロパティをFalseに設定すると、発生するイベント(ブックを閉じる)はAutoCloseマクロをトリガーしません。

次に、EnableEventsプロパティをTrueに設定して、後でイベントを続行できるようにすることができます(また、そうする必要があります)。

別の回避策は、2番目のブックのAutoCloseマクロにある種の「フラグ」を設定することです。このフラグは、最初のブックが開いているかどうかをテストし、開いている場合は、AutoCloseマクロでメインコードを実行しないようにすることができます。

これを行うには、モジュールページの上部にある2番目のワークブックに、次のコードを追加します。

Dim AutoCloseDisabled as Boolean Sub DisableAutoClose()

AutoCloseDisabled=True End Sub

AutoCloseDisabled変数の宣言ステートメントはどのプロシージャの外にもあることに注意してください。つまり、スコープはグローバルであり、すべてのプロシージャ内でアクセスできます。

次に、AutoCloseマクロを変更して、次に示すように、本体がIfステートメントで囲まれるようにします。

Sub AutoClose()

'variable declarations here

If Not AutoCloseDisabled then

'body of AutoClose here

End if End Sub

2番目のブックが正常に開かれると、AutoCloseDisabled変数が自動的にFalseに設定されるという考え方です。 (ブール変数は、宣言時にデフォルトでFalseになります。)DisableAutoCloseプロシージャはブックで実行されないため、AutoCloseマクロのIfステートメントを使用すると、マクロの実際の本体を実行できます。

最初のブックから2番目のブックを開くと、最初のブックのコードで2番目のブックのDisableAutoCloseマクロを呼び出して、AutoCloseDisabledフラグをTrueに設定できます。これは、2番目のブックが閉じられると、IfステートメントがAutoCloseマクロの本体をスキップすることを意味します。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(10232)は、Microsoft Excel 2007および2010に適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。