Microsoft Office Accessのファイル(.mdb)の中のテーブル定義一覧を、 Oracle用のテーブル定義に変換して、一覧で出力するコードを紹介します。
概要
- Excel と VBA を使用します。
- VBA の 関数
GetTableDefinitions
を実行すると、 開いているエクセルのシートにアクセスファイル内のテーブル定義を一覧出力します。
- テーブル定義書(.xls)に貼り付けることを想定してテキストデータを作ります。
- Access のテーブルを Oracle 用 にするので、 例えばテキストのカラムは
VARCHAR2
として表示されます。
- システムテーブルは出力しません(コードを一部変更すれば出力できます)。
- リンクテーブルは、リンクの内容を表示します。 リンク先のテーブルの定義は出力しません。
使い方
- Excel を開きます。
- 開発ツール Visual Basic Editor を開きます。
- モジュールを追加します。
- ツールの参照設定から Microsoft DAO にチェックを入れます。
- 下のコードを貼り付けます。
- 関数
GetTableDefinitions
を実行します。
続きを読む VBA: Access のテーブル定義を一覧で出す方法 →
コントロールを引数にしたプロシージャを作るにはどうすればいいのか、
コントロールをForループに入れてやるにはどうすればいいのか。
経緯
フォームをダブルクリックした際に フォーム上の 全テキストボックスについて .Enabled
を変化させようとしました。 全てのコントロール名を書き連ねるのは大変なので、 ループ を使って複数のコントローラに対して処理を行おうと考えました。
解決法
VBA では Me.Controls("ControlName")
でコントロールを取得できます。 そこで、 .Enabled
を変更する TextBox の名前を txtTitle1
、txtTitle2
というようにしておき、次のようなループ処理を実行します。
|
For i = 0 to N Me.Controls("txtTitle" & CStr(i)).Enabled = False Next |
Me.Controls
で取得したコントローラについて複数行の初期化処理を行う場合は With
を使うのもいいですが、 次のように変数に代入して使うこともできます。
|
Dim cobj As Object Set cobj = Me.Controls("XXXXXX") |
変数宣言のところで As TextBox
などと書くと エラーが出ます。
これらを利用して作ったのが次のコードです。
|
Option Explicit Private Const N As Integer = 8 '制御する TextBox の総数 'フォームがダブルクリックされたら、テキストボックスを編集不可にします。 Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Dim i As Integer Dim cobj As Object Dim b As Boolean b = Not txtTitle1.Enabled For i = 1 To N Set cobj = Me.Controls("txtTitle" & CStr(i)) cobj.Enabled = b Next i End Sub |
その他下記のような方法が使えそうです。
配列を使う
.Net では コントロール の 配列 (のようなもの) に コレクション というのがあり、 配列のように扱うことができます。 しかし VBA には コレクション クラス が用意されていません。
しかし、 Me.Controls
の引数にする String は配列にできます。
コレクションクラスを作ってしまう
コントロールの集合を扱えるようなクラスを作ってしまうのもいいと思います。
A Life Summary of an Gypsy