「コード」カテゴリーアーカイブ

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


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

経緯

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

解決法

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

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

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

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

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

配列を使う

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

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

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

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


クリスタルレポート 説明文を1ページ目に表示


発注書などでは、最初のページに説明文を表示したいことがある。 しかし、レポートヘッダでは位置が悪い。かといって、ページヘッダではすべてのページに表示される。 そんなときは次のようにすると、1ページ目にだけ表示する項目を設定できる。 1行程度の説明文の場合におすすめ。

  1. ページヘッダ内にテキストを入力する。

  2. 入力したテキストを選択して、メニューバーから CrystalReport を選び、その中から、式ワークショップをクリック。

  3. 左に表示されるツリーから、ページヘッダを選び、その中の説明文を書いているテキストオブジェクトを選択する。

  4. 次に、新規作成を選び、非表示というのを選ぶ。

  5. 次のコードを入力する。

これで、1ページ目にだけ表示される。