目次
作成したテーブルを一括削除する
この記事では「作成した テーブル を一括削除する」ために利用可能な CleanUpAllTable というユーザー定義関数について紹介します。
この情報が読者のお役に立てば幸いです。
解決できること
Microsoft Access の中でここで紹介する
CleanUpAllTable
をマクロの中で呼び出すと、このアプリケーションで既に作成されたテーブルのうち指定された先頭文字(注1)を含むテーブルを一括削除することができます。
読んでほしい方
こうした Microsoft Access VBA を使ったアプリケーションをこれから作ろうと思っている方、今まで VBA によるアプリケーションを Git(注2)、SVN(Subversion)(注3) 等のバージョン管理ツールで版数管理したい方。
(注1) この Enjoy-Tech サイトで紹介している Access のアプリケーションの多くは 【Access VBA】Access を使って業務ツールを作成する際のテーブル、クエリ、マクロ名称付与基準、VBAコーディング作法について で紹介した決められたルールによりテーブルの名称を決めています。この中の「クエリが作成するテーブル名は Txxxx_テーブルの内容を分かりやすく記述」というルールに基づきテーブル名称を付与しいる場合は指定先頭文字は “T” という文字列になります。
(注2) Git: プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムです。
(注3) SVN(Subversion):プログラムのソースコードなどの変更履歴を記録・追跡するための集中型のバージョン管理システムです。
CleanUpAllTable 関数 の紹介
説明
一般的に Microsoft Access の VBA を使ってアプリケーションを開発していくと、同じアプリケーションを改善目的で更新していくことがよくあります。
アプリケーション数が少なかったり、個人で開発しているうちはアプリケーションのファイル名に版数や作成更新日を表す文字をつけて、前の版数と区別することが多いと思いますが、1つ前のアプリケーションと今回のアプリケーションとの差分を取ったり、チームでアプリケーションを開発している場合には、アプリケーションを Git、SVN(Subversion) 等のバージョン管理ツールで管理することが必要になってきます。
こうした状況下で、開発した Access アプリケーションを眺めてみると、このアプリケーションは
- クエリ
- マクロ
- VBA
といった動作ロジックを構成する部分と、結果として作成された
- テーブル
のようにロジックにはあまり関わらない一時的なデータを保管した部分に分かれており、このテーブル部分も含めて構成管理の対象としてしまうと、 Git、SVN(Subversion) のリポジトリ(管理領域)が巨大化したり、そもそもバージョン管理したくない部分が対象になってしまうといったことが起きてしまいます。
また開発したアプリケーションを他のユーザ、部門に展開する際にテーブル部分に個人情報等、他へ開示すべきではない情報が含まれていることもあるでしょう。
この関数はこうした状況を回避するためにアプリケーションで既に作成されたテーブルのうち指定された先頭文字を含むテーブルを一括削除したい場合に利用します。
参照オブジェクト
この関数を利用するためにはこの関数の実行前に
データベースツール > Visual Basic > ツール > 参照設定
の中で
- Microsoft Office 16.0 Access Database engine
- Microsoft ActiveX Data Objects 6.1 Library
にチェックを入れる必要があります。
利用例
例えば、 Access の中に以下のようなテーブル「issues」「T0000_BookName」「T0040_最新作成日」「T0050_BookName_最新」があるとすると、
この CleanUpAllTable を呼び出すマクロ M9000_Call_CleanUpAllTable をデザインビューで次のように定義し、
デザインビューを閉じて、このマクロ M9000_Call_CleanUpAllTable をダブルクリックして実行するとテーブル「T0000_BookName」「T0040_最新作成日」「T0050_BookName_最新」が削除され「issues」のみが残ります。
このマクロ M9000_Call_CleanUpAllTable の定義内容を詳しく見ると
If CleanUpAllTable("T0")>0 Then
メッセージボックス ("T0" テーブルの削除に失敗しました。,はい,なし)
If 文の最後
のように CleanUpAllTable を “T0” といったパラメータを付けて呼び出しています。ここに “T0” は削除したいテーブル名の先頭に共通して現れる文字列です。
引数
属性 | 意味 | |
---|---|---|
先頭文字列 | 文字型 | 削除したいテーブル名の先頭に共通して現れる文字列を指定します。 |
戻り値
値 | 意味 |
---|---|
0 | 成功 |
1 | 失敗 |
VBAコード
Function CleanUpAllTable(prefix_string As String) As Integer
Const C_SUCCESS As Integer = 0
Const C_FAILURE As Integer = 1
Dim currentDataBase As Database
Dim tableDefinition As Variant
Dim lengthPrefixString As Integer
On Error GoTo exitWithFailure
Set currentDataBase = CurrentDb
lengthPrefixString = Len(prefix_string)
If (lengthPrefixString = 0) Then
prefix_string = "T"
lengthPrefixString = Len(prefix_string)
End If
For Each tableDefinition In currentDataBase.TableDefs
If (Left(tableDefinition.Name, lengthPrefixString) = prefix_string) Then
DoCmd.DeleteObject acTable, tableDefinition.Name
End If
Next
Set currentDataBase = Nothing
CleanUpAllTable = C_SUCCESS
Exit Function
exitWithFailure:
CleanUpAllTable = C_FAILURE
End Function
VBAコードの簡単な説明
行番号 | 説明 |
---|---|
1 | 関数名と関数の戻り値の型(Integer:整数型)、入力パラメータ prefix_string の名前、型(String:文字列型)を定義しています。 |
3-4 | このプログラムの中で利用する定数C_SUCCESS(0:一致)、C_FAILURE(1:不一致)を定義しています。ここでは30行目、35行目ででこの関数の戻り値が C_SUCCESS(0:成功)、C_FAILURE(1:失敗)であることが明確にわかるようなコーディングの仕方になります。 |
6-9 | オブジェクト currentDataBase、変数 tableDefinition、lengthPrefixString を定義します。 |
11 | この関数の中で何らかのエラーが発生した場合に exitWithFailure へジャンプします。 |
13 | currentDataBase を現在実行中のデータベース、つまりこのVBAが実行されている Access のアプリケーションに設定します。 |
15-20 | 入力パラメータ prefix_string の文字列長を調べ、もしその長さが 0 なら “T” を prefix_string として設定します。これは入力パラメータ prefix_string の指定がなかった場合の回避処置になります。 |
22-26 | この VBA コードが含まれている Access アプリケーション内で現在定義されているテーブル名を1つ1つ取り出し、その名前の先頭文字が prefix_string で指定された文字列と同じだった場合、このテーブルを削除します。 |
28 | currentDataBase として定義したオブジェクトに割り当てられていたメモリを開放します。 |
30 | この関数の戻り値に C_SUCCESS(0:成功) を設定して関数を終わります。 |
35 | この関数の戻り値に C_FAILURE (1:失敗) を設定して関数を終わります。 |
まとめ
この記事では「作成した テーブル を一括削除する」ために利用可能な CleanUpAllTable というユーザー定義関数について紹介しました。
この情報が読者のお役に立てば幸いです。