こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ACCESS2016 フォームのラベルについて

お世話になります。

ACCESS2016を使い、製品確認フォームの中に「未確認」と言うコントロールにチェックがあると、フォームの下の方にラベルで「確認中」と表示されるようにしたい
のですが、何故か全てに表示されてしまいます。

フォームの読み込み中のイベントを使って下記のようにしているのですが、だめでした。フォームのデータは、1000件あり、チェックが入っているものだけに、「確認中」の文字を表示させたいのです。イベントの仕掛ける場所が間違っているのでしょうか
If [未確認] = -1 Then Me!ラベル1200.Visible = True
If [未確認] = 0 Then Me!ラベル1200.Visible = False
※ラベル1200="確認中"
宜しくお願い致します。

投稿日時 - 2019-08-28 17:46:59

QNo.9650553

困ってます

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

こんにちは
帳票形式の登録の実行画面です。
・ラベル1200の配置可能場所はフォームヘッダとフォームフッタです。
 フォームフッタでは表示位置がスッキリしないので、フォームヘッダーの
 標題の隣にしました。
 Form_Current()とは行頭のレコードセレクタに▶のある行を指します。
 フィールドを2つ追加しました。どちらも自動計算なので、
 タブストップを「いいえ」にします。
  [登録日]はテーブル定義規定値をDate()
  [確認日]はチェックを入れた時にDate()、外した時に空
   この2つは自動計算の為タブストップを「いいえ」とします
 VBAには暗黙宣言(忖度)があり、思い違いの変数もエラーなしとします
 宣言のない変数はエラーとする「変数宣言を強制する」設定にします。
  VBAの画面でツール→オプション→編集→変数宣言を強制する

・フォームよりのクエリビルダについては次回に回答します。
-------------------------------------------------------
Private Sub Form_Current()
ラベル1200.Visible = False
If M未確認Fg = False Then ラベル1200.Visible = True
End Sub
------------------------------------------------------
Private Sub M未確認Fg_Click()
If M未確認Fg = False Then
ラベル1200.Visible = True
M確認日 = ""
Else
M確認日 = Date
End If
End Sub
-------------------------------------------------------

投稿日時 - 2019-09-02 15:32:17

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(8)

ANo.8

ようやく最終です。ご健闘を!!
フォームよりのクエリビルダ
フォームのデザインビューで、フォームフッタ→レコードソースの右端の…で
クエリビルだ―が起動します
テーブルのワイルドカード[*]をフィールドにドラッグ右隣りのフィールドを右クリック→ビルド
ここへ
 進捗: IIf([M未確認Fg]=No,"確認中"," 確認済")
をコピペ
これはexcelのfxのようなもので
 ある程度命令文の文法を理解出来ればマウス操作で
 作成も出来るのですが今回はコピペで済ましましょう。

投稿日時 - 2019-09-02 16:27:56

補足

お疲れさまです。
ご回答をありがとうございました。
私の理解力が乏しいため、質問をさせて頂きます。

フォームの元のデータのクエリに対して、 [未確認] がTrueだったら、新しく作ったフィールドに「確認済」の表示をして、[未確認] がFalsだったら「確認中」の表示をする。そして、その内容をフォームに反映すれば良いと言う意味でしょうか

お忙しいとは思いますが宜しくお願い致します。

投稿日時 - 2019-09-02 17:43:42

ANo.6

今晩は
Form_Current()ですか。
自分はForm_Load()とForm_Activate()ですが
Form_Current()の方が汎用性ありそうですね

>Private Sub Form_Current()
  If [事前確認] = True Then Me!ラベル1200.Visible = True
  If [事前確認] = False Then Me!ラベル1200.Visible = False
 End Sub

☆デバッグは出来ましたか
 補足頂いたコードに、Stop命令を追加し実行して下さい
 Stopの位置で止まります。
 ここで1回のF8押下で命令文が1回進みます
 事前確認の位置にマウスカーソル移動すると値が表示されます。
 これは、先頭のレコードの事前確認の値です
 次のレコードに進むと再びStopの位置で止まります。
-------------------------------------------------------------------
 Private Sub Form_Current()
  Stop
  If [事前確認] = True Then Me!ラベル1200.Visible = True
  If [事前確認] = False Then Me!ラベル1200.Visible = False
 End Sub
-----------------------------------------------------------------------------

投稿日時 - 2019-08-31 20:07:34

ANo.5

今晩は
>フォームのデータは、1000件あり、
☆フォームのレコードソースのテーブルのレコード件数のことですよね
 このフォームは単票フォームですか帳票フォームですか
 もし帳票フォームなら1000のラベルが必要です
 [事前確認]とか [未確認]フィールドはこのテーブルにありますか
☆この場合VBAより、クエリの式で[確認]フィールドを追加します。
 レコードソースの右端にマウスを移動すると
 …印が表示されクリックでクエリーになります
 テーブルのワイルドカード(*)をフィールドへドラッグ
 右隣りに式をフィールドに次のように記述します
 確認:IIf([事前確認] = True,"","確認中")
   なぜかifでなくiif
 

投稿日時 - 2019-08-31 01:55:09

ANo.4

>フォームの読み込み中のイベントを使って下記のようにしているのですが、
 フォームのデータは、1000件あり、
 チェックが入っているものだけに、「確認中」の文字を表示させたいのです。
 イベントの仕掛ける場所が間違っているのでしょう
☆イベントの仕掛ける場所とイベントの種類のどちらか
>If [未確認] = -1 Then Me!ラベル1200.Visible = True
 If [未確認] = 0 Then Me!ラベル1200.Visible = False
 ※ラベル1200="確認中"
☆この命令文を含むモジュールを
 Private Sub から End Sub迄を補足願えませんか
☆デバッグ(虫取り)は命令文を1ステップずつ実行し、
 その時の変数の値を確認できます

投稿日時 - 2019-08-29 23:01:01

補足

ご連絡をありがとうございました。
下記の命令だけになります。
Private Sub Form_Current()
If [事前確認] = True Then Me!ラベル1200.Visible = True
If [事前確認] = False Then Me!ラベル1200.Visible = False

End Sub
宜しくお願い致します。

投稿日時 - 2019-08-30 10:00:54

ANo.3

>フォームの読み込み中のイベントを使って下記のようにしているのですが、
 フォームのデータは、1000件あり、
 チェックが入っているものだけに、「確認中」の文字を表示させたいのです。
 イベントの仕掛ける場所が間違っているのでしょうか
☆イベントの仕掛ける場所とイベントの種類のどちらか
>If [未確認] = -1 Then Me!ラベル1200.Visible = True
 If [未確認] = 0 Then Me!ラベル1200.Visible = False
 ※ラベル1200="確認中"
☆この命令文を含むモジュールを
 Private Sub から End Sub迄を補足願えませんか
☆デバッグ(虫取り)は命令文を1ステップずつ実行し、
   その時の変数の値を確認できます
 詳しくは参考URLをご覧ください

参考URL:https://ja.wikipedia.org/wiki/デバッグ

投稿日時 - 2019-08-29 22:30:02

ANo.2

> ラベルの部分をクリックすると消える現象で

レコード移動時に記載されたIF文はレコード移動時にしか実行されませんから
ラベルのクリック時のイベントとかフォームそのもののクリックイベントになにか記載されているのではないですか。

投稿日時 - 2019-08-29 12:42:04

ANo.1

レコード移動時のイベントに入れてるのですよね。
蛇足ですが
-1とか0じゃなくてTrueとFalseのほうがわかりやすい気もしますが…。

投稿日時 - 2019-08-28 19:21:45

お礼

お疲れさまです。

回答をありがとうございました。
下記のように変更をして「レコード移動時」のイベント
で実行されるようにしました。
結果は、全てのフォームで表示されるのですが、何故か、
ラベルの部分をクリックすると消える現象で、全てが
消えている状況です。意図的に、「未確認」にチェック
を入れて確認して見てのですが、そちらも消えてしまって
いるため、IF文がうまく動作していない感じです。
何が問題でしょうか

宜しくお願い致します。
If [未確認] = True Then Me!ラベル1200.Visible = True
If [未確認] = False Then Me!ラベル1200.Visible = False

投稿日時 - 2019-08-29 11:45:42

あなたにオススメの質問