VBAでテキストボックスの名前を表示する方法

このQ&Aのポイント
  • VBAでテキストボックスの名前を表示する方法について質問させてください。前回教えていただいたVBAを使って、伝票番号と得意先コードの2つのテキストボックスの値をチェックし、条件に該当しない場合はテキストボックスの色を黄色に変更することができます。しかし、2つのテキストボックスがともにエラーの場合に、名前が2回表示されず、1つの名前しか表示されません。1つのメッセージボックスに黄色のテキストボックスの名前を一度に表示させるにはどうすればよいでしょうか?
  • VBAでテキストボックスの名前をまとめて表示する方法について教えてください。前回の質問で教えていただいたVBAを使用し、2つのテキストボックスの値をチェックし、条件に該当しない場合はテキストボックスの背景色を黄色に変更しました。しかし、2つのテキストボックスがともにエラーの場合に、メッセージボックスが2回表示されず、1つの名前しか表示されません。黄色のテキストボックスの名前を一度に表示させるにはどうすればよいでしょうか?
  • VBAで黄色のテキストボックスの名前をまとめて表示する方法について質問です。前回教えていただいたVBAを使って、フォーム上のテキストボックスの値をチェックし、条件に該当しない場合はテキストボックスの背景色を黄色に変更することができます。しかし、2つのテキストボックスがともにエラーの場合に、メッセージボックスが2回表示されず、1つの名前しか表示されません。黄色のテキストボックスの名前を一度に表示させるにはどうすればよいでしょうか?
回答を見る
  • ベストアンサー

条件に該当したテキストボックスの名前を(2)

前回 http://okwave.jp/qa/q6556269.html で テキストボックスの名前をメッセージボックスに表示する方法(VBA)を 教えて頂いたのですが新たにわからない事がでてきてしまったので 質問させて下さい><自力で解決しようとしたのですがどうしてもできなくて… Accessのバージョンは2003です。 フォームに伝票番号と得意先コードの2つの入力フィールド (テキストボックス)があります。 やりたいことは、以下のようなことです。 伝票番号は100未満の数値でなくてはならず、 得意先コードは1以上かつ10未満でなくてはなりません。 もし、上記の条件に該当しない場合はテキストボックスの色を 黄色に変更させます。 そうしたら黄色に変更されたテキストボックスだけの名前を メッセージボックスに表示させます。 前回教えて頂いたVBAを追記して動かしたところ どちらか片方がエラーの場合はテキストボックスの名前が メッセージボックスに表示されるのですが、 2つともエラーの場合、メッセージボックスが2回表示され 1つのメッセージボックスに1つの名前しか表示されません。 記述したVBAでは正常な動作だと思うのですが、 これを1つのメッセージボックスに黄色のテキストボックスの 名前をいっぺんに表示させたいのですが、 どのようにすれば宜しいでしょうか。 良かったらご教授お願いします!>< 現在記述しているVBAは以下になります。 ---------------------------------------------------------------- Private Sub 閉じる_Click() 'フォーム上のコントロールを格納する変数 Dim ctrl As Control 'フォーム上のすべてのコントロールに対しての繰り返し処理 For Each ctrl In Me.Controls '取得したコントロールがテキストボックスかどうか If ctrl.ControlType = acTextBox Then '伝票番号の値が100未満の場合 If Me!txtNo <= 100 Then '背景をピンクに Me!txtNo.BackColor = vbMagenta Else '背景を黄色にして値を元に戻す Me!txtNo.BackColor = vbYellow End If '得意先コードの値が1以上かつ10未満の場合 If Me!txtCode <= 10 And Me!txtCode >= 1 Then '背景をピンクに Me!txtCode.BackColor = vbMagenta Else '背景を黄色にして値を元に戻す Me!txtCode.BackColor = vbYellow End If End If Next ctrl Me.Undo 'フォーム上のすべてのコントロールに対しての繰り返し処理 For Each ctrl In Me.Controls 'テキストボックスのコントロールを取得 If TypeOf ctrl Is TextBox Then '取得したコントロールが黄色だった場合 If ctrl.BackColor = vbYellow Then 'メッセージボックスに名前を表示 MsgBox ctrl.Name End If   End If Next ctrl End Sub

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

前回のを少し変更したものを掲載しておきます。 Private Sub コマンド6_Click() Dim ctl As Control Dim msg As String For Each ctl In Me.Controls If TypeOf ctl Is TextBox Then If ctl.Value = 3 Then ctl.BackColor = vbYellow End If End If Next ctl For Each ctl In Me.Controls If TypeOf ctl Is TextBox Then If ctl.BackColor = vbYellow Then msg = msg & ctl.Name & vbCrLf 'これはコメントアウトしていますMsgBox ctl.Name End If End If Next ctl If Not IsNull(msg) Then MsgBox msg Else MsgBox ("該当するテキストボックスはありません") End If End Sub

その他の回答 (4)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.5

テキストボックスを初期化するのも載せておきます。 Private Sub コマンド7_Click() Dim ctl As Control For Each ctl In Me.Controls If TypeOf ctl Is TextBox Then 'テキストボックスをクリア ctl.Value = ""   'テキストボックスの背景色を白に ctl.BackColor = vbWhite End If Next ctl End Sub

macaron0321
質問者

お礼

お教え頂いたVBAで上手く動かす事ができました>< すごく助かりました!! 何度も何度も質問させて頂いてその度にお優しい回答下さり ほんとうにありがとうございました;;

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

ついでに少しお待ちを。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

勘違いがあったので、 合わせて以下に変更してください。 If msg <> "" Then MsgBox msg Else DoCmd.Close acForm, Me.Name End If

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

No1です。 If Not IsNull(msg) Then MsgBox msg Else MsgBox ("該当するテキストボックスはありません") End If の部分は、Elseのところが必要なければ 以下のようにしてもいいのでは、と思います。 If Not IsNull(msg) Then MsgBox msg End If

macaron0321
質問者

補足

ご回答ありがとうございます! 上記Elseを抜いたVBAの方で早速試させて頂きました! すると、両方エラーの場合メッセージボックスに両方の テキストボックスの名前を表示することができました! ですが、両方ともエラーでない場合は何も記載されていない メッセージボックスが表示されてしまうのですが 両方ともエラーでない場合はフォームを閉じる動作を したいのですが、どうすれば宜しいでしょうか>< 何度もすみません;;

関連するQ&A

  • AccessVBAでサブフォームの値チェック

    こんにちは。前々回http://okwave.jp/qa/q6556906.htmlにて 質問させて頂いたサブフォームの値チェックをする際のVBAの記述で 教えて頂きたい事ができましたので、質問させて頂きます。 Accessのバージョンは2003です。 以下のようなVBAを記述しているのですが、一度VBAでの処理を実行すると フォームを一度閉じてから再度フォームを開くと該当フィールドの色が 元に戻らず黄色又はマゼンダのままとなってしまっています… 別のAccessにて動作確認した際は、再度フォームを開いてもフィールドの 色は元のままだったのですが… どこが原因なのか教えていただければ幸いです。 長文で見辛いですが宜しくお願いします。 Dim stDocName As String Dim stLinkCriteria As String 'フォーム上のコントロールを格納する変数 Dim ctrl As Control Dim msg As String 'フォーム上のすべてのコントロールに対しての繰り返し処理 For Each ctrl In Me.Controls '取得したコントロールがテキストボックスかどうか If ctrl.ControlType = acTextBox Then 'Aの値が15.5未満の場合 If Forms![F_親フォーム].[F_サブフォーム].Form.[A] <= 15.5 Then '背景をピンクに Forms![F_親フォーム].[F_サブフォーム].Form.[A].BackColor = vbMagenta Else '背景を黄色に Forms![F_親フォーム].[F_サブフォーム].Form.[A].BackColor = vbYellow End If 'Bの値が45未満の場合 If Forms![F_親フォーム].[F_サブフォーム].Form.[B] <= 45 Then '背景をピンクに Forms![F_親フォーム].[F_サブフォーム].Form.[B].BackColor = vbMagenta Else '背景を黄色に Forms![F_親フォーム].[F_サブフォーム].Form.[B].BackColor = vbYellow End If End If Next ctrl Me.Undo 'フォーム上のすべてのコントロールに対しての繰り返し処理 For Each ctrl In Forms![F_親フォーム].[F_サブフォーム].Form.Controls 'テキストボックスのコントロールを取得 If TypeOf ctrl Is TextBox Then '取得したコントロールが黄色だった場合 If ctrl.BackColor = vbYellow Then 'msgにテキストボックスの名前を追加 msg = msg & ctrl.Name & vbCrLf 'メッセージボックスに名前を表示 End If End If Next ctrl 'msgが空白じゃない場合 If msg <> "" Then 'メッセージボックスを表示 MsgBox msg Else 'ctrl.BackColor = vbWhite stDocName = "F_フォーム1" DoCmd.Close acForm, Me.Name DoCmd.OpenForm stDocName End If Exit_閉じる_Click: Exit Sub Err_閉じる_Click: MsgBox Err.Description Resume Exit_閉じる_Click End Sub

  • 条件に該当したテキストボックスの名前を

    はじめまして。 現在AccessでVBを書いているのですが少しわからない事が ありましたので質問させて下さい。 バージョンは2003です。 単票形式のフォームにて、既に作られているボタンを押すと あるテキストボックスの値が条件に該当する場合、テキストボックスの 色が黄色に変わるというVBが既に書かれています。 そのVBが実行された後、黄色に変わったテキストボックスだけの 名前をメッセージボックスに表示させたいのですが、 どのようなVBを書けばいいのでしょうか>< VB始めたばかりでまだよく理解できていないので ネットなどでいろいろ調べたのですがわからなくて… msgbox関数?を使えばいいのはわかるのですが。 良かったらご教授お願いします!

  • テキストボックス1が空白のとき背景色を黄色にしてタブ移動しないようにし

    テキストボックス1が空白のとき背景色を黄色にしてタブ移動しないようにして再入力を促したいのですが うまく行きません まず、テキストボックス1からテキストボックス2に進むようタブオーダーの設定がされています Private Sub テキストボックス1_Exit(Cancel As Integer) '空白のとき If IsNull(Me!テキストボックス1) Then MsgBox "テキストボックス1が指定されていません。" 'テキストボックス1を黄色にする Me!テキストボックス1.BackColor = 8454143 'タブキー操作で移動できないようにする テキストボックス2.TabStop = False Else 'それ以外の場合タブキー操作で移動できるようにする テキストボックス2.TabStop = True End If ご指導ください

  • テキストボックスかコンボボックスを条件としたい

    フォーム上のコントロールを取得する時に、 「テキストボックスかコンボボックスなら」としたいのですが、VBAコードがわかりません。 ************************************************************ Sub Sample() Dim myCtrl As Control Dim myForm As String myForm = "フォーム1" For Each myCtrl In Forms(myForm).Controls If myCtrlのタイプがテキストボックス Or コンボボックス Then Debug.Print myCtrl.Name End If Next End Sub ************************************************************ に修正していただけますか? ControlType プロパティを使うと思うのですが、使い方がわかりません。 ご回答よろしくお願いします。

  • (ACCESS)条件に応じて、テキストボックスを表示・非表示設定

    (ACCESS)条件に応じて、テキストボックスを表示・非表示設定 フォーム上のテキストボックスAを条件に応じて表示・非表示にさせたいです。 条件は、サブフォームのテキストボックスBに「支払」を言う文字があれば、 テキストボックスAが表示され、なければ非表示にする方法が探しています。 わからないなりに調べて、多分以下の文章になると思いますが、「?」の条件式がうまくいきません Private Sub AA_GotFocus() If  ????? Then Me!テキストボックスA.Visible = False Else Me!テキストボックスA.Visible = True End If End Sub どなたか教えてください。 宜しくお願い致します。

  • Access VBA のテキストボックスの記載について

    ACCESS VBA の記載方法について質問です。 テキストボックスの名前を Nenrei とします。ここには必ず数字を入力させたく、何も入れずにエンターキーを押した場合はエラー表示をさせたいと考えています。  If me.T1="" then msgbox "年齢が入力されていません。" End If としますが、空打ちしてもエラー表示が出てきません。 プロパティでT1の書式を数値に変えて、  If me.T1=0 then msgbox "年齢が入力されていません。" End If としても結果は同じです。 どうすればよいか、教えてください。

  • 効率の良いテキストボックスの検知について

    VB6の初心者です。質問させていただきます。 画面上に5つのテキストボックス(TEXT1、TEXT2、TEXT3、TEXT4、TEXT5)と 1つのコマンドボタン(Cmd_SAVE)があり、 画面上の5つのテキストボックスをすべて記入し、 コマンドボタンを押すと、登録確認のメッセージボックスが表示され、 OKボタンを押すと、サーバへ転送され、 画面上のテキストボックスにひとつでも空欄があると、どのテキストボックスが 空欄であるかを示すメッセージが表示される処理をさせています。 そこで質問なのですが、今、メッセージボックス、登録処理は出来るようになったのですが、 とても処理の効率が悪い、もっと空欄を確認するのにすっきりとしたコードはある、と知り合いに言われました。 おそらく、繰り返し等を用いると思うのですが、メッセージにそれぞれのオブジェクト名を代入するやり方がわかりません。 下記が今のコーディングです。 Private Sub Cmd_SAVE_Click()   If TEXT1.Text = "" Then      MsgBox "TEXT1が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If TEXT2.Text = "" Then      MsgBox "TEXT2が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If TEXT3.Text = "" Then      MsgBox "TEXT3が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If TEXT4.Text = "" Then      MsgBox "TEXT4が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If TEXT5.Text = "" Then       MsgBox "TEXT5が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If MsgBox("入力データを登録しますか?", vbOKCancel, "登録確認") = vbCancel Then     Exit Sub   End If   End If ~登録処理~ End Sub どのような書き方がきれいで、効率的なコーディングなのでしょうか? ご教示お願いします!

  • テキストボックスなら空白にする

    フォームにテキストボックス2つとコンボボックス2つを設置して、 規定値に値を設定し、 Private Sub cb_テキストボックスなら空白にする_Click() Dim ctl As Control For Each ctl In Me.Controls If ctl.ControlType = acTextBox Then ctl.Value = Empty End If Next ctl End Sub としたのですが何も起こりません。 空白にするにはどうすればいいでしょうか? あと、 ctl.Valueと打つ時に、 ドットの後に、Valueが一覧に出てきませんでした。 それが原因で空白にならないのでしょうか? ご回答よろしくお願いします。

  • VB.Netのテキストボックスのコントロール

    VB2010を使用しています。チェックボックスのon/offでテキストボックスの入力を制限しようとしています。 If Check1.Checked = True Then For Each Cont As Control In Me.Groupko顧客数.Controls If Cont.Name Like "Text*" Then ここの記述ですが         『Cont.ReadOnly = True』と書いても構文が違うのか認識しません?? End If Next Else           逆のコードの予定 End If 大量のテキストボックスがあるので一つ一つコードを書くのは面倒なので ご教授お願いします。

  • Accessテキストボックスの未入力チェック

    いつも参考にさせて頂いております。 Accessテキストボックスの未入力チェックで上手くいかず悩んでいます。過去の情報等調べましたが、わかりませんでした。 どなたか宜しくお願い致します。 フォーム1にテキストボックス1、ボタン1があります。 テキストボックスを何も入力せず、Enter等で移動する時にチェックをかけたいです。 もし、テキストボックスに何も入力がなかったら、メッセージを出し、フォーカスをテキストボックスに戻す。 何か入力があれば、ボタンにフォーカスが移動する。 If IsNull(Me.テキストボックス1) = "" Then msgbox "未入力です。" Me.テキストボックス1.SetFocus End If 宜しくお願い致します。

専門家に質問してみよう