web-dev-qa-db-ja.com

特定のフィールドに入力したときに、フィールドをMS Accessフォームに表示する

ユーザーがデータを入力するためのMS Accessのフォームを作成していますが、フィールドが多すぎます。ほとんどの場合、約半分のフィールドのみが使用されます。

したがって、ユーザーが以前に与えられたフィールドで入力した内容に応じてのみ特定のフィールドを表示させたいと思います。

例:ユーザーはプロジェクト番号、タイトルを入力してから、「はい/いいえ」のエンジニアリングをチェックします。彼がチェックしたので、これはエンジニアリングに影響があり、ユーザーが入力しなければならない12のフィールドが表示されることを意味します。

これは可能ですか?

1)VBAなし

2)VBAを使用

5
user2385809

おそらくVBAなしでは不可能です。

たとえばVBAの場合:

  1. フォームがデザインビューであることを確認する
  2. コンボボックス、ビルドイベント、コードビルダーを右クリックします。

これにより、フォームの背後にあるコードが開きます。 BeforeUpdateイベントのデフォルトコードにドロップします。代わりにChangeイベントが必要なので、右上でドロップダウンをBeforeUpdateからChangeに変更します。これにより、次のようなコードが得られます。

Private Sub Field1_Change()

End Sub

ここでは、コンボボックスの値を確認し、必要に応じてフィールドを非表示にします。

コンボボックスの名前がField1であることを前提としています(もちろん、実際の名前は異なります)、コードを追加して、Field2を非表示にする次のようにします。

Private Sub Field1_Change()
  If Field1.Value = "Yes" Then
      Me.Field2.Visible = False
  End If
End Sub

すべてのフィールドの名前を知っておく必要があることに注意してください。これは、[その他]タブの[プロパティ]ボックス(F4)の[名前]フィールドにあります。コードで何が行われているのかを理解できるように、すべてのフィールドにわかりやすい名前を付ける必要があります。

チェックボックスの場合も、まったく同じ手順に従いますが、おそらくClickイベントを使用する必要があります。ただ実験してください。

チェックボックスコードの例:

Private Sub Check5_Click()
  ' Note: vbTrue = -1
  If Me.Check5 = vbTrue Then
    MsgBox ("Ticked")
  Else
MsgBox ("Not Ticked")
  End If
End Sub
5
Nick.McDermaid

リストボックスの値を選択した後、特定のフィールドを表示するフォームがあります。 AfterUpdate関数を使用します。これまでのところ機能しています。私のコードは以下です。 ProjectNameとProjectNumberは、Engineeringが選択されている場合にのみ表示するフィールドです。 OtherNameおよびOtherNumberは、「NotEngineering」プロジェクトの場合にのみ表示するフィールドです。

プロジェクトタイプを選択するフィールドをクリックしてこのコードを挿入し、プロパティシートの[イベント]タブに移動して、[更新後]をクリックし、コードビルダーを選択してVBAに貼り付けます。

Private Sub ProjectType_AfterUpdate()
If ProjectType.Value = "Engineering" Then
      Me.ProjectName.Visible = True
      Me.ProjectNumber.Visible = True
 Else
      Me.ProjectName.Visible = False
      Me.ProjectNumber.Visible = False
 End If

If ProjectType.Value = "NotEngineering" Then
      Me.OtherName.Visible = True
      Me.OtherNumber.Visible = True
 Else
      Me.OtherName.Visible = False
      Me.OtherNumber.Visible = False
 End If

End Sub
2
Melisa L.

VBAなしでこれをやめない方法があります。 VBAの方がより多くのことができるので、VBAをお勧めします。

非表示にするのではなく、式による条件付き書式で不要なフィールドを無効にしてみてください。

無効にするコントロールを右クリックします。下に移動して[条件付き書式]をクリックします新しいルールを追加します[式は次のとおりです]を選択します

例:[fld1] = "yes"

無効になっているボックスをクリックします。

これで、フィールド1で「はい」が選択されている場合、選択したコントロールは無効になります。

1
ShadeBlack

私は同じ問題を抱えており、私は次のことをしました:

Private Sub Field1_Click()
If Field1 = "Yes" Then
Me.Field2.Visible = True
Else: Me.Field2.Visible = False
End If
End Sub

しかし、他の問題があります。レコードを変更すると、最後のレコードで表示するように選択したフィールドが現在のレコードで表示されますが、オプションは何も選択していません。

ありがとうございました、

0
CandleJack