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の技!!」とかつくっていきたいもんだ。
I'm a software engineer who like travel to island in Japanese. Recently I am enjoying agile manager, coach, product owner for my work. The person grows like that.











