« とり泉でちょっと堪能 (2011/05/05) | Main | シマノ、10速Tiagra 4600、10速Deore XT 780を発表 »

2011.05.15

Jetのサンドボックスモードが有効だとAccessマクロでDir()関数が使えない

ちょろっとハマったネタなので備忘録代わりに。
Accessのマクロには指定した式がTrueの場合にコマンドを実行する条件式を書くことができます。
ここの部分にはVBAの関数なども書けるのですが、一部の関数はサンドボックスモードが有効だと使用できないようになっています。

KB294698によると、レジストリ「\\HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\4.0\engines\SandboxMode」の値が3や1の場合に特定のVBA関数をブロックする仕組みになっています。
この中にはファイルなどの存在有無やファイルリストを取得するためのDir()関数がリストアップされていませんが、実際はサンドボックスモードが有効だとDir()関数も無効化されます。
そのため、既存のマクロで動いていたのに急に動かなくなった場合は、サンドボックスモードの設定値を確認すると良いでしょう。

なお、端末ごとにレジストリの値が変わるなどの場合、レジストリの変更を全台で統一するのは面倒です。
恒常的な回避策としてはDir()関数のラッパー関数をモジュール内に作成し、条件式からはラッパー関数を呼び出す、という方法があります。
単純にファイル有無のチェックだけであれば、ラッパー関数内でDir()関数を呼び出せばよいだけですし、実装上の面倒な点は無いでしょう。

|

« とり泉でちょっと堪能 (2011/05/05) | Main | シマノ、10速Tiagra 4600、10速Deore XT 780を発表 »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/27186/51672286

Listed below are links to weblogs that reference Jetのサンドボックスモードが有効だとAccessマクロでDir()関数が使えない:

« とり泉でちょっと堪能 (2011/05/05) | Main | シマノ、10速Tiagra 4600、10速Deore XT 780を発表 »