電子書籍の厳選無料作品が豊富!

お世話になります。
現在下記のようなコードをモジュールで組んでます。

フォームのテキストボックスに値を入力する。
Forms!入力.入力者 = "山田 太郎"
Forms!入力.かな = "やまだ たろう"
Forms!入力.性別 ="男"

ここでForms!入力.入力者は繰り返し出てくるので、簡単にする
ことは出来ないでしょうか?
よろしくお願い申し上げます。

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/09/04 13:43

簡単と言うならば、これも該当ですかね?


Me.入力者 = "山田 太郎"
Me.かな = "やまだ たろう"
Me.性別 ="男"

Meと言う書き方ができます。
私の(この場合自フォームの).入力者

この書き方の一番の利点は、フォーム名を書かないので
そのフォームをCOPYして別フォームを作成しても
手直しなく動きます。
テストがスムーズに行える利点があります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す