【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?

アクセスのフォームで、この様に、"品番"、"設備名"、"単価"、"担当者"のテーブル(1000レコードほどあります)のフォームがあります。
このフォームを開いた時には、1レコード目が表示されますが、下に一覧が全て表示(100以上は次のページ)され、検索フォームに品番、又は、設備名を入力すると、絞りこまれて表示される様にできますか?
又、下の一覧の担当者の右に"編集ボタン"を置きボタンを押すと、左のデータを編集できる様に(編集は上のフォームで行う)できますか?
説明がへたくそで申し訳ありませんが、誰か教えて頂けませんか?
よろしくお願いします。

「アクセスのフォームで」の質問画像

A 回答 (1件)

検索フォームは、表示と別のフォームになりますか?



一覧表示しているフォームの、フォームヘッダ部に
検索条件入力とかがあるものと考えてみます(フォームは1つ)


抽出の仕方とかは以下が参考になると思います。

複数条件の抽出フォームの設計 その1
http://hatenachips.blog34.fc2.com/blog-entry-129 …

その3まであるようです。


> 編集は上のフォームで行う
が、イメージできていないので、何個か例を


≪編集ボタンが押されたら、横のデータをいじれるようにする≫には

編集ボタン名を「btn00」とした場合、

1)レコード移動時に詳細部分のテキストボックスに対して、編集ロックをかけます。
2)編集ボタンをクリックした時に、編集ロックを解除します。
解除後、他のレコードに移動すると 1) により編集ロックがかかります。

レコードを選択すると編集ロックがかかり、編集ボタンでそのレコードの編集が可能


Private Sub SetLocks(bOk As Boolean)
  Dim ctl As Control

  For Each ctl In Me.Section(acDetail).Controls
    If (ctl.ControlType = acTextBox) Then
      ctl.Locked = bOk
    End If
  Next
End Sub

Private Sub Form_Current()
  Call SetLocks(True)
End Sub

Private Sub btn00_Click()
  Call SetLocks(False)
'  Me.品名.SetFocus
End Sub


編集ロックを解除した際に、"品名"にフォーカスを移動させるのなら、コメントを有効に

更新のタイミングは、他のレコードに移動した時になります。



以下の方がイメージに近いでしょうか。

≪編集ボタンが押されたら、上に内容を表示しデータをいじれるようにする≫には

上のフォームヘッダ部に配置するテキストボックス名を
"txt品番"、"txt設備名"、"txt単価"、"txt担当者" と仮定します。

編集ボタンがクリックされるまでは空欄になっています。
(いろいろ入力できますが、編集ボタンクリックで意味のないものになります)
編集ボタンがクリックされた時点で、上の"txtXXXX" のコントロールソースを設定します。
レコード移動時には、そのコントロールソースをクリアします。


Private Sub SetTextCtrl(bOk As Boolean)
  If (bOk = True) Then
    Me.txt品名.ControlSource = Me.品名.ControlSource
    Me.txt設備名.ControlSource = Me.設備名.ControlSource
    Me.txt単価.ControlSource = Me.単価.ControlSource
    Me.txt担当者.ControlSource = Me.担当者.ControlSource
  Else
    Me.txt品名.ControlSource = ""
    Me.txt設備名.ControlSource = ""
    Me.txt単価.ControlSource = ""
    Me.txt担当者.ControlSource = ""
  End If
End Sub

Private Sub Form_Current()
  Call SetLocks(True) ' ★
  Call SetTextCtrl(False)
End Sub

Private Sub btn00_Click()
  Call SetTextCtrl(True)
'  Me.txt品名.SetFocus
End Sub

★部分では編集ロックをかけていますが、デザインで「編集ロック」を「はい」で設定すれば、実行時に変更する必要はありません。

上の部分で変更していくと、編集ボタンを押した横の表示も変わっていきます。

更新のタイミングは、他のレコードに移動した時になります。



≪編集ボタンが押されたら、上の内容を横のデータに単に反映する≫には

編集ボタンがクリックされた時点で、現レコードに値を代入します。
編集ロックがかかっていても、VBAでの代入は可能です。

Private Sub Form_Current()
  Call SetLocks(True) ' ★ 同上
End Sub

Private Sub btn00_Click()
  If (Not IsNull(Me.txt品名)) Then Me.品名 = Me.txt品名
  If (Not IsNull(Me.txt設備名)) Then Me.設備名 = Me.txt設備名
  If (Not IsNull(Me.txt単価)) Then Me.単価 = Me.txt単価
  If (Not IsNull(Me.txt担当者)) Then Me.担当者 = Me.txt担当者
End Sub

更新のタイミングは、他のレコードに移動した時になります。




検索フォームが別フォームであったのなら、前述URLでのサンプルで
strFilter を作るまではその通りで、Me.Filter に設定する部分を書き換えます。
一覧を表示しているフォーム名を「F1」と仮定した場合、

まず、フォーム「F1」が起動されているか判別します。
起動されていれば「F1」の Filterを設定します。

If (CurrentProject.AllForms("F1").IsLoaded) Then
  With Forms("F1")
    .Filter = Mid(strFilter, 5)
    If strFilter = "" Then
      .FilterOn = False
    Else
      .FilterOn = True
    End If
  End With
End If



※ 内部で作成した関数
  SetLocks / SetTextCtrl 名は適宜変更してください。
    • good
    • 0
この回答へのお礼

返事遅くなり申し訳ありません。
解り易い回答ありがとうございました。

お礼日時:2009/11/21 09:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!