Accessのテーブル一覧を削除するVBA

感想おまちしてます!

仕事ではOracleを使うことが多いのだが、テスト工程にはいるとAccessを使うこともある。これはGUIで簡単にレコードを見れるというのがすんばらしいからだろう。

で、テーブルのリンクをODBCから吸い込んでテーブルの表示欄にテーブルリンクをインポートするんだけど、このリンクって複数選択して削除?というのができないのだ。

これがとても不便で、接続先を変えるときなんて「Delete」>「Enter」の連打連打連打。こういうことをやってると、人間なんだから一度にポチっと削除したくなるのがエンジニアたるもの。

そこで、テーブルリンク一覧を削除するコードをVBAで作ってみた。「めんどくさい」ときにちょこっとマクロやバッチをかける人間とかけない人間の差はでかい。

ポイントはDaoでテーブル一覧を取得するというもの。SQLで「Select * from MSysObjects」ってやればわかるんだけど、テーブル情報にもいろいろあって、Accessで使うものもあるので、すべて削除はできない。よって、リンクを判断してやればいいんだけど、そこまでは調べられなかったので、Accessで使うテーブル以外を削除する方法をとった。

マクロなりOnClickイベントなりで呼び出すとよいね。

'------------------------------------------------------------
'[ツール]-[参照設定]にて「Microsoft DAO 3.6 Object Library」
'にチェックをつけてください
'------------------------------------------------------------
'全テーブルを削除します。
'------------------------------------------------------------

Function DeleteTable()
Dim tbls As DAO.TableDefs
Dim tbl As DAO.TableDef

'テーブル一覧取得
Set tbls = CurrentDb.TableDefs
Dim Cnt, i
Cnt = 0
Dim TableNames(500) 'ひとまず500テーブルまでとする
Dim DelName

For Each tbl In tbls

'システムテーブルを削除しようとするとエラーになる
'MSysではじまる名前のテーブルはシステムテーブルなので
'それを判定して削除対象を決める
If InStr(1, tbl.Name, "MSys", vbBinaryCompare) = 0 Then
TableNames(Cnt) = tbl.Name
Cnt = Cnt + 1
End If
Next

For i = 0 To Cnt - 1
'テーブル削除
tbls.Delete(TableNames(i))
Next

MsgBox "削除したよー 削除件数=" & (Cnt - 1)

End Function

システムテーブルの判定は「tbl.Name, 2) <> “MS” Then」でもいいかもかも。こういうの増やして「仕事で使える500の技!!」とかつくっていきたいもんだ。