- ベストアンサー
Access VBA でのフォーム名の取り扱いについて
お世話になります。 現在下記のようなコードをモジュールで組んでます。 フォームのテキストボックスに値を入力する。 Forms!入力.入力者 = "山田 太郎" Forms!入力.かな = "やまだ たろう" Forms!入力.性別 ="男" ここでForms!入力.入力者は繰り返し出てくるので、簡単にする ことは出来ないでしょうか? よろしくお願い申し上げます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> ここでForms!入力.入力者は繰り返し出てくるので、簡単にする > ことは出来ないでしょうか? 変数を宣言して、それを使用すれば、文字数は減らすことができます。 「入力者」テキストボックスに対して、 値の代入やプロパティの参照などを行うのなら「Dim A As Control」とコントロールとして、 代入した値そのものを参照すればよいなら「Dim A As String」と文字列として、 それぞれ宣言して使用するのがよいと思います(「A」が変数:適当な文字を指定可能)。 なお、変数にテキストボックスの値を代入する場合は「A=B」でOKですが、テキストボックス等の オブジェクトそのものを変数に設定する場合は、「Set」を使用する必要があります。 Option Compare Database Option Explicit Dim Cntl As Control '変数「Cntl」をコントロールとして宣言 Private Sub Form_Open(Cancel As Integer) Dim StrName As String '変数「StrName」を文字列として宣言 Set Cntl=Forms!入力!入力者 '「入力者」を変数「Cntl」に設定 StrName="山田 太郎" '変数「StrName」に「"山田 太郎"」を代入 Cntl=StrName 'Cntlの値としてStrNameを代入 '~~~~~~ ' 処理内容 '~~~~~~ End Sub Private Sub Form_Close() Set Cntl=Nothing End Sub 上記のようなコードにすれば、このコードを記述したフォームのコードでは 「Cntl」を「Forms!入力」の代わりに使用することができます。 (「Dim Cntl As Control」の宣言を、「Dim StrName As String」と同様に Subの内側で宣言した場合は、そのSub内でのみ有効になります) また、単に値を参照するだけなら、StrNameを使用すればOKです。 なお、Closeイベントでの「Set Cntl=Nothing」は、変数の値を保持するために 消費されているメモリを解放するためのものです。 (本来は、フォームを閉じた際(?)に自動で解放されるはずですが、それが うまくいかない場合があるため、常套的に行われる措置です) 「Cntl」の宣言をSub内にした場合は、これも同じSub内で行います。 また、「Forms!入力」を省略する方法としては、「With」というのもありますので、 簡単にご紹介(一部のみ抜粋の形): With Forms!入力 !入力者="山田 太郎" !かな="やまだ たろう" !性別="男" End With
その他の回答 (1)
- kurodai2
- ベストアンサー率38% (77/202)
簡単と言うならば、これも該当ですかね? Me.入力者 = "山田 太郎" Me.かな = "やまだ たろう" Me.性別 ="男" Meと言う書き方ができます。 私の(この場合自フォームの).入力者 この書き方の一番の利点は、フォーム名を書かないので そのフォームをCOPYして別フォームを作成しても 手直しなく動きます。 テストがスムーズに行える利点があります。
お礼
詳しく解説していただいてありがとうございます。