• ベストアンサー

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

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

  • kou99
  • お礼率35% (23/65)

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

  • ベストアンサー
  • 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

  • VBAのGoToControl について

    お世話になります。 フォームで値が入力されないで、フォーカスが移動したら メッセージを表示させ、そのテキストボックスに移動する というのを行いたいのですが表示させることは出来るのですが どうしても次のテキストボックスに移動してしまいます。 :この場合は次のテキストボックスに移動してしまいます DoCmd.GoToControl "テキスト1" :この場合だとForms!入力画面!物テキスト1という名前のフィールド はありませんとエラーになります。 DoCmd.GoToControl "Forms!入力画面!物テキスト1" 標準モジュールで記述し、テキスト1からフォーカスが離れるときに 呼び出しています。 よろしくお願い申し上げます。

  • Access 検索フォームの作り方について

    Accessで受付リスト作成しました。 *受付一覧テーブル:データはここに保存 *入力フォーム:データはここから入力 これとは別に、検索フォームを作りたいのです。 フォームのヘッダーにテキスト(氏名を入力)とトグルボタン("検索開始")を作って、 受付一覧テーブルにあるデータを入力フォームと同じ形式で呼び起こしたいのです。 初心者のため、こんな簡単な質問をして申し訳ございません。 ただ、1点気になるのが、テキストには全くの同一人物のデータが複数あります。 (例) 受付日    氏名 2005/11/2   山田 太郎 2006/02/5   山田 太郎 2007/10/1   山田 太郎 この複数のデータを受付日直近のものから順呼び起こすことは可能でしょうか? 難しいの場合は、単純に検索フォームの作り方をお教えいただけますと大変助かります。 何卒よろしくお願いいたします。

  • ACCESS フォームの入力で

    フォームの入力でコード番号を入力すると項目が自動入力出来るようにしたくて 2つ目のテキストボックスのコントロールソースに=DLookUp("[商品名]","テーブル2","[商品コード] = [コード] ")と入力したのですが 1つ目のテキストボックスに入力すると そのときは2つ目のテキストボックスは白紙で 一度フォームを閉じてから立ち上げると2つ目のテキストボックスにも入力されています。 これは閉じないと入力されないのでしょうか? 1つ目を入力した後に表示されるようにしたいのですが・・・。 よろしくお願いします。

  • アクセスの(売上伝票)フォームについて

    アクセスの初心者です。下記の仕掛けの作り方の操作を教えてください。 (1)担当者テーブルがあります。     担当者コード 担当者名     001      山田     002      川本     003      吉田 (以下略)  売上伝票フォームで、売上入力するとき、担当者テキストボックスに担当者コードを「002」と入力すると、担当者名前のテキストボックスに、「川本」と自動的に表示し、(次の商品名のテキストボックスにフォーカスを移し)たい。  本を見ても載っておらず、講師に聞いても答えがなく教えて下さい。、実例を見ていますから出来ることは、間違いないと思います。

  • アクセスでテキストボックスの値が空白だったら

    お世話になっております。 フォームのテキストボックスの値が0か空白だったら、レポート上に表示されるものを変えたいのですが、うまくいきません。 If [Forms]![フォーム1]![テキストボックス1].value = 0 Or [Forms]![フォーム1]![テキストボックス1].value = "" Then Me![レポート上のテキストボックス] = "無" Else [Forms]![フォーム1]![レポート上のテキストボックス1] = [Forms]![フォーム1]![テキストボックス1] & "ヶ月" End If これだと何も入っていないときに"ヶ月"と表示されてしまいます。どのように書けばよいのでしょうか? ご教授願えませんでしょうか?

  • VBA初心者です。

    VBA初心者です。 今ユーザーフォームで入力項目などを作成し、セルに反映させようと思ったんですが。 構文エラーでが出てしまい、いまいちどこが悪いのかもわかりません・・・汗 やりたかったことは、 テキストボックス  テキストボックス 氏名        山田 太郎 住所        山田 花子 です。よろしくおねがいします。

  • VBA フォームに入力された数値を検索条件としたい

    ど素人ですので、よろしくお願いいたします。 VBAでユーザーフォームのテキストボックスに入力された数値○○~○○という条件でエクセルのデータをフィルターをかけて検索する構文を書きたいのですが、フォームのコードと標準モジュールのコードをどう繋げたらよいのかわかりません。よろしくお願いいたします。 以下が途中まで書いた構文です。 モジュールコード Sub 抽出() Range("a4").AutoFilter field:=1, Criteria1:=">=■1", _ operator:=xlAnd, Criteria2:="<■2" End Sub フォームコード Private Sub 実行_Click() ■1(○○以上の数値が入るテキストボックスの構文) ■2(○○未満の数値が入るテキストボックスの構文) End Sub 全く違っているのかも知れませんが、フォームは無視してモジュールの■に数値を直接入れると正しく検索します。

  • Accessのフォームについて

    Accessで、テーブルへのデータ入力を簡易化するための、フォームを作成しています その中で、コンボボックスのなかから項目を入力したら 別に用意されているテーブルから 一致する項目をテキストボックスに 自動的に値を入力できるようにしたいのですが、 どのようにしたらいいのか、わかりません。 ~フォームに入力する項目~ 氏名、年齢、地区(コンボボックス)、地区コード、地区番号、住所、電話番号  等 ~地区テーブル~ 地区コード、地区、地区番号 調べてみたところ、プロパティのコントロールソースというところで、 値を持ってくるための式を作成するということでしたが・・・ 実践してみたのですが、初心者ゆえ、あまりよく理解できませんでした どうかよろしく御願いします。

  • Accessであいまい検索するフォームをつくってみたんですが?

    Accessの初心者です。 本などをみながらあいまい検索ができるようなフォームをつくってみましたがフォームを開いた時、全レコードが表示されてしまいます。 クエリーの抽出条件はLike "*" & Forms!フォーム1!テキスト0 & "*"にしてテキストボックスプロパティの更新後処理でDoCmd.Requeryとしました。(意味がよくわからないんですけど) フォームを開いた時やテキストボックスになにも入力されていない時、全レコードが表示されないようにするにはどうすればいいのでしょうか? よろしくお願いします。

  • Accessで、フォームからフォームへ値を引き継ぐやり方

    フォームからフォームへ値を引き継ぐやり方を教えて下さい。 たとえば、フォームAのテキストボックスに対して取引先コードを入れるような場合に、 取引先検索専用画面(フォームB)で検索して、選択したレコードのデータをフォームAのテキストボックスに入れたいのです。 心優しい方、宜しくお願いいたします。