
こんにちは。前々回http://oshiete.goo.ne.jp/qa/6556906.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
No.2ベストアンサー
- 回答日時:
shut0325です。
過去の質問も見たのですが、今回の処理の流れがイマイチ把握できません。
下記の様な感じでしょうか? 補足お願いします。
1.サブフォームを持つフォームである。
2.メインフォームにはいくつかテキストボックスがある。
3.サブフォームにはA B という名前の二つのテキストボックスがある。
という設定で、
a.メインフォームで「閉じる」ボタンを押すと、
サブフォームのA及びBの値に応じて、A Bの背景色を黄色/マゼンタにする。
b.サブフォームのテキストボックス全ての背景色を確認し、黄色であればそのテキストボックスの名前を、メッセージ格納用の変数に格納する。
c.メッセージ格納変数が空白でないならば、メッセージを表示し、空白ならばフォームを閉じ、F_フォーム1を開く。
これだと、a.の処理の際、全てのコントロールを確認しなくとも、AとBだけ参照して処理すればいいのかなと思ったので。
さて、こちらでも簡単なコードを書いてテストしてみましたが、閉じれば背景色は元の設定に戻るため、ご質問の様な現象は再現しませんでした。
原因はわからないですが、フォーム/サブフォーム共に、読み込み時(Loadイベント)に全てのテキストボックスの背景を白にするコードを追加することで解消できないでしょうか?
この回答への補足
ご回答ありがとうございます!
shut0325様が書いて頂いた流れであってます。
ただひとつ補足のようなものがありまして…
サブフォームにあるテキストボックスはA,Bの2つだけではなく
C,D,E,F…と19個程あります。
現段階では動作確認のためA,Bの2つしかVBAでチェックをかけていませんが、
最終的には19個ある全てのテキストボックスに別々の値(上限)の指定をし、
入力チェックを行いたい意向です。
そうだとしても、確かに全てのコントロールを確認しなくても
良いような気がしました…(汗
余裕ができたら少し記述の見直しを実施したいと思います。
無駄な処理は書かない方が他の人がみてもわかりやすいと思いますし。笑
尚、背景色の不具合についてはshut0325様が教えてくださった通り
フォームの読み込み時の処理に背景色を白にするという記述をしたところ
解決しました!!
こんな簡単な方法を、質問する前にどうしてこれが思い浮かばなかったのかと、
少々恥ずかしいです。トホホ
どうもありがとうございました。すごく助かりました><
No.1
- 回答日時:
ざっとしかみていないのですが、ずっと下のほうの、
'ctrl.BackColor = vbWhite
↑これがコメントアウトになっているからでは?
この回答への補足
ご回答ありがとうございます。
説明不足ですみません。
ご指摘頂いた記述[ctrl.BackColor = vbWhite]に関しては
別のAccessで動作確認した際はもともとなかったものです。
今回問題のAccessにて正常動作しなかったので上記記述を追加しましたが
こちらも以下エラーが表示され、正常動作しませんでした。
実行時エラー'91':
オブジェクト変数または With ブロック変数が設定されていません。
以上の流れからコメントアウトにしました。
説明が不足していまして申し訳ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript javascriptで入力フォームが空欄の時にアラートによるエラーを出すコードを書いています。 2 2023/06/13 17:58
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Googleフォーム・複数人の申し...
-
VBAにてメッセージボックスを最...
-
子フォームから親フォームのオ...
-
実験ノート作成用テンプレート...
-
VB.net(VB)で、フォームにExcel...
-
Accessでフォームから別フォー...
-
サブフォームの新規レコードに...
-
VB.NET メッセージボックスが隠...
-
メインフォームからサブフォー...
-
VBA リストボックスをダブルク...
-
accessで2つ以上のフォームを起...
-
ACCESSのサブフォームのフォン...
-
アクセスVBA フォームのス...
-
C# 別なフォームへ値を渡す (...
-
wordpress コメントを残す 変更
-
ToolStripStatusLabelを固定し...
-
アクセス・別フォームの新規レ...
-
ACCESS VBAサブフォーム(DATA S...
-
アクセス フォームが存在する...
-
Access+VB 子フォームから親フ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Googleフォーム・複数人の申し...
-
VBA リストボックスをダブルク...
-
Accessでフォームから別フォー...
-
C# 別なフォームへ値を渡す (...
-
VBAにてメッセージボックスを最...
-
PDFフォームに本日の日付を自動...
-
アクセスVBA フォームのス...
-
サブフォームの新規レコードに...
-
メッセージボックスの背景色
-
VBプログラムの終了
-
メインフォームからサブフォー...
-
Access 無操作の場合、自動で閉...
-
子フォームから親フォームのオ...
-
リストボックスの選択解除
-
accessで2つ以上のフォームを起...
-
フォーム上の全てのコントロー...
-
ユーザーフォーム上にアイコン...
-
ExcelVBAでユーザーフォーム内...
-
ASP.NETとC#でWebフォームを呼...
-
PDFフォーム内で日付計算したい...
おすすめ情報