4月 7th, 2008at 18:36

Tags: ,

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の技!!」とかつくっていきたいもんだ。

このエントリーをはてなブックマークに追加