• ベストアンサー

Access VBA でのフォーム名の取り扱いについて

お世話になります。 現在下記のようなコードをモジュールで組んでます。 フォームのテキストボックスに値を入力する。 Forms!入力.入力者 = "山田 太郎" Forms!入力.かな = "やまだ たろう" Forms!入力.性別 ="男" ここでForms!入力.入力者は繰り返し出てくるので、簡単にする ことは出来ないでしょうか? よろしくお願い申し上げます。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

> ここで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

kou99
質問者

お礼

詳しく解説していただいてありがとうございます。

その他の回答 (1)

  • kurodai2
  • ベストアンサー率38% (77/202)
回答No.2

簡単と言うならば、これも該当ですかね? Me.入力者 = "山田 太郎" Me.かな = "やまだ たろう" Me.性別 ="男" Meと言う書き方ができます。 私の(この場合自フォームの).入力者 この書き方の一番の利点は、フォーム名を書かないので そのフォームをCOPYして別フォームを作成しても 手直しなく動きます。 テストがスムーズに行える利点があります。

関連するQ&A