2011/04/05

access2010 TempVars/LocalVars/ReturnVarsコレクション

TempVarsコレクションは、access2007でも使える。Access共有のコレクションだからマクロとVBAの間でデータ交換に使用することができる。TempVarオブジェクトはVariantなのだけどObjectは格納できない。要は数値か文字列であるということ。また、TempVarsオブジェクトを一旦作成すると、データベースを閉じるかTempVarオブジェクトを削除するまでデータは保持される。Publicな変数みたいなのだけど、実行時エラーが発生しても失われることがない変数という感じ。使いどころとしては、ユーザログイン情報など持ちまわりたい情報を格納するのに向いていると思う。以前のバージョンだとデータの一時保存用にフォーム上のテキストボックスを使っていたものの代わりになるでしょ。
TempVars!var_name
TempVars(index)
TempVars("var_name")

LocalVarsコレクションは、マクロ/データマクロ専用。LocalVarオブジェクトはマクロ上の一時変数だから、オブジェクトを使用したしたマクロ終了時に消滅する。代入できるのは数値もしくはテキストのみ。
LocalVars!var_name
LocalVars(index)
LocalVars("var_name")

ReturnVarsコレクションはデータマクロの戻り値専用で、マクロとVBAいずれからでも参照できる。データマクロ上でのみ値の取得と設定が可能だが、データマクロ以外では値の取得のみ可能。TempVars.Remove("var_name") のように削除することもできない。コレクションからReturnVarオブジェクトが削除されるのは、データマクロの実行(RunDataMacro)マクロアクションを実行したときとデータマクロの実行マクロアクションを実行したマクロ/データマクロが終了したとき。VBA上ではDoCmd.RunDataMacroを実行したときのみで、プロシージャを抜けてもReturnVarオブジェクトは削除されない。また、DoCmd.RunDataMacroを実行後設定されたReturnVarオブジェクトは、マクロ上でデータマクロの実行マクロアクションが実行されても削除されない。VBA上で参照できるReturnVarsコレクションとマクロ/データマクロ上で参照できるReturnVarsコレクションは別なのだろう。極端な話であるけれども、VBA上で取得できるReturnVarオブジェクトは、データベースを閉じるか戻り変数のないデータマクロを実行するまで残り続けるということか?
ReturnVars!var_name
ReturnVars(index)
ReturnVars("var_name")

データマクロ実行後戻り変数の名前が判らないとき、でも戻り変数はひとつであることが判ってるときは、ReturnVars(0).Valueでもいいんだな。

0 件のコメント: