「VBA」タグアーカイブ

VBA: Access のテーブル定義を一覧で出す方法


Microsoft Office Access(アクセス)のファイル(.mdb)の中のテーブル定義一覧を、 Oracle用のテーブル定義に変換して、一覧で出力するコードを紹介します。

概要

  • Excel と VBA を使用します。
  • VBA の 関数 GetTableDefinitions を実行すると、 開いているエクセルのシートにアクセスファイル内のテーブル定義を一覧出力します。
  • テーブル定義書(.xls)に貼り付けることを想定してテキストデータを作ります。
  • Access のテーブルを Oracle 用 にするので、 例えばテキストのカラムは VARCHAR2 として表示されます。
  • システムテーブルは出力しません(コードを一部変更すれば出力できます)。
  • リンクテーブルは、リンクの内容を表示します。 リンク先のテーブルの定義は出力しません。

使い方

  1. Excel を開きます。
  2. 開発ツール Visual Basic Editor を開きます。
  3. モジュールを追加します。
  4. ツールの参照設定から Microsoft DAO にチェックを入れます。
  5. 下のコードを貼り付けます。
  6. 関数 GetTableDefinitions を実行します。
続きを読む VBA: Access のテーブル定義を一覧で出す方法

コントロールを変数にしてForループ Excel VBA


コントロール引数にしたプロシージャを作るにはどうすればいいのか、 コントロールForループに入れてやるにはどうすればいいのか。

経緯

フォームをダブルクリックした際に フォーム上の 全テキストボックスについて .Enabled を変化させようとしました。 全てのコントロール名を書き連ねるのは大変なので、 ループ を使って複数のコントローラに対して処理を行おうと考えました。

解決法

VBA では Me.Controls("ControlName") でコントロールを取得できます。 そこで、 .Enabled を変更する TextBox の名前を txtTitle1txtTitle2 というようにしておき、次のようなループ処理を実行します。

Me.Controls で取得したコントローラについて複数行の初期化処理を行う場合は With を使うのもいいですが、 次のように変数に代入して使うこともできます。

変数宣言のところで As TextBox などと書くと エラーが出ます。

これらを利用して作ったのが次のコードです。

その他下記のような方法が使えそうです。

配列を使う

.Net では コントロール の 配列 (のようなもの) に コレクション というのがあり、 配列のように扱うことができます。 しかし VBA には コレクション クラス が用意されていません。

しかし、 Me.Controls の引数にする String は配列にできます。

コレクションクラスを作ってしまう

コントロールの集合を扱えるようなクラスを作ってしまうのもいいと思います。