xlAutoClose
適用対象: Excel 2013 | Office 2013 | Visual Studio
XLL が非アクティブ化されるたびに、Microsoft Excel によって呼び出されます。 Excel セッションが正常に終了すると、アドインは非アクティブ化されます。 Excel セッション中にユーザーがアドインを非アクティブ化することができ、その場合、この関数が呼び出されます。
関数とコマンドの登録解除、リソースの解放、カスタマイズを元に戻すことなどを XLL が実行できるようするために適切なことではありますが、Excel はこの関数を実装しエクスポートするのに、XLL を必要としません。 関数とコマンドを XLL が明示的に登録解除しない場合、xlAutoClose 関数を呼び出した後、Excel はこれを実行します。
int WINAPI xlAutoClose(void);
パラメーター
この関数に引数はありません。
プロパティ値/戻り値
この関数を実装する場合、1 (int) を返す必要があります。
注釈
XLL が非アクティブになる、つまりメモリからアンロードされるたびに、Excel は xlAutoClose 関数を呼び出します。 以下の状況で、XLL は非アクティブになります。
セッション中にアクティブな場合に、Excel セッションが正常に終了した時点。
Excel セッション中に明示的にアンロードされた場合。
XLL は以下のいくつかの方法でアンロードされる可能性があります。
アドイン マネージャーを使用する。
この DLL の名前を唯一の引数として取る xlfUnregister を呼び出す別の XLL から。
この DLL の名前を唯一の引数として取る UNREGISTER を呼び出す XLM マクロ シートから。
この関数は、以下を実行します。
XLL が追加した任意のメニューまたはメニュー項目を削除する。
任意の必要なグローバル クリーンアップを実行する。
作成された任意の名前、特にエクスポートされた関数の名前を削除する。 REGISTER への 4 番目の引数が存在する場合、関数の登録がいくつかの名前を作成する原因になる場合があることにご注意ください。
例
ファイル SAMPLES\EXAMPLE\EXAMPLE.C
と SAMPLES\GENERIC\GENERIC.C
、この関数の実装例を参照してください。 次のコードは です SAMPLES\GENERIC\GENERIC.C
。
int WINAPI xlAutoClose(void)
{
int i;
XLOPER12 xRes;
//
// This block first deletes all names added by xlAutoOpen or
// xlAutoRegister12. Next, it checks if the drop-down menu Generic still
// exists. If it does, it is deleted using xlfDeleteMenu. It then checks
// if the Test toolbar still exists. If it is, xlfDeleteToolbar is
// used to delete it.
//
// The following code to delete the defined names
// does not work in the current version of Excel.
// You cannot delete these names once they are Registered.
// The code is left here in case the functionality becomes
// available in a future version.
//
for (i = 0; i < g_rgWorksheetFuncsRows; i++)
Excel12f(xlfSetName, 0, 1, TempStr12(g_rgWorksheetFuncs[i][2]));
for (i = 0; i < g_rgCommandFuncsRows; i++)
Excel12f(xlfSetName, 0, 1, TempStr12(g_rgCommandFuncs[i][2]));
//
// Everything else works as documented.
//
Excel12f(xlfGetBar, &xRes, 3, TempInt12(10), TempStr12(L"Generic"), TempInt12(0));
if (xRes.xltype != xltypeErr)
{
Excel12f(xlfDeleteMenu, 0, 2, TempNum12(10), TempStr12(L"Generic"));
// Free the XLOPER12 returned by xlfGetBar //
Excel12f(xlFree, 0, 1, (LPXLOPER12) &xRes);
}
Excel12f(xlfGetToolbar, &xRes, 2, TempInt12(7), TempStr12(L"Test"));
if (xRes.xltype != xltypeErr)
{
Excel12f(xlfDeleteToolbar, 0, 1, TempStr12(L"Test"));
// Free the XLOPER12 returned by xlfGetToolbar //
Excel12f(xlFree, 0, 1, (LPXLOPER12) &xRes);
}
return 1;
}