2015年2月12日木曜日

[MSAccess] オブジェクトが正しくないか、現在設定されていません

CurrentDb メソッドを使って DAO オブジェクトの参照を取得した場合に、エラーが発生することが多い。

(エラーとなるサンプル)
Dim Table As DAO.TableDef
Set Table = CurrentDb.TableDefs("テーブル1")
Debug.Print Table.Name

エラーメッセージ:[3420] オブジェクトが正しくないか、現在設定されていません。

マイクロソフト サポート情報によると、これは CurrentDb メソッドの参照を明示的に変数に代入してから使用する必要がある、とのこと。

(改善例)
Dim DB As DAO.Database
Set DB = CurrentDb()
Dim Table As DAO.TableDef
Set Table = DB.TableDefs("テーブル1")
Debug.Print Table.Name


これだとバグとしか思えないんですが、言語仕様なんでしょうか・・

■ 参考資料

ACC: "Object Invalid or No Longer Set" Error Using CurrentDb
http://support.microsoft.com/kb/167173/ja