himorogiの日記

主にプログラミングに関することなど。少々ハード(電子工作)についても。

おまけ:テーブルの有無確認用

データベース変換やワークシート変換のマクロアクションにしても、今回提供したユーザー関数にしても、インポートやリンクの際に指定した名前のオブジェクトが存在すると上書きしないので失敗する。そこで、インポートやリンクの前に同じ名前のオブジェクトがあれば消してしまいたいが、オブジェクトを消した後にユーザー関数やマクロアクションが失敗して、一旦終了した後、再度一連のマクロを実行した場合、今度は消すべきオブジェクトが存在しないのでエラーになってしまう。
そこでオブジェクトの削除を VBA で実行し On Error Resume Next …という手もあるけど、今回はオブジェクト削除のアクションを実行する前に、目的のオブジェクト(テーブル)が存在するかどうか確認するユーザー関数を作ってみた。On Error Resume Next でなんでもかんでも通してしまうのも怖いし。

"MSysObjects" は MS Access のシステムテーブル。[メニュー]から[オプション]の設定で可視にできるけど、普段は表示されていない。VBA の中で参照するのに、可視|不可視の設定は関係ないけど。

Function isExistTbl(tblName As String) As Boolean
    isExistTbl = (DCount("*", "MSysObjects", "[Name]='" & tblName & "'") > 0)
End Function