Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 8 : Access 2013)
テキストボックスへの表示(suzuさん)
投稿日時: 17/08/17 09:17:42
投稿者: 丘珠

一度下記コードで試して、テキストボックス69への書込みができたのですが、すべてのデータに”完了”表示されてしまいます。
「D管受日」に日付を入力すると「サブフォーム」の「テキストボックス69」へ”完了”表示するのですが、日付が入力されていない「テキストボックス69」はブランクとなります。
@【完成】と代入し、レコードとして『保存』したい。
A可能であればVBAで「お願いします。
申し訳ありませんがもう一度アドバイスをお願いします。
 
こんにちは。
  
件名 :テキストボックスへ表示
本文 :
 
    引用:
    サブフォーム新受注のテキストボックス69へ(完了)と入力させたい。
 
 
  
フォームのコントロールに 【完了】と 『表示』させれば良いのか
それとも、【完成】と代入し、レコードとして『保存』したいのかどちらでしょう。
  
  
一般機能で行いたいのでしょうか。
マクロを使うのでしょうか。
VBAを使うのでしょうか。
  
なんか仕様がはっきりしませんが。。。
  
表示したいテキストボックスのコントロールソース
=IIF(IsDate(Forms!受注データ!D管受日),"完了","")
 

回答
投稿日時: 17/08/17 13:25:40
投稿者: Suzu

丘珠 さんの引用:
一度下記コードで試して、テキストボックス69への書込みができたのですが、すべてのデータに”完了”表示されてしまいます。

 
それが希望だったのでは?
 
ベタ書きです。テストできていません。
メインフォームのコントロール D管受日 の更新後処理
 
  サブフォームコントロール名
  テキストボックス69コントロールソース名
   は修正下さい。
 
Private Sub D管受日_AfterUpDate()
  Dim rs          As DAO.RecordSet
  Dim varBookmark As Variant

  'D管受日 に入力された値が日付と判定できるなら
  If IsDate(Me.D管受日) Then
    'サブフォームのレコードセットを参照
    Set rs = Me.[サブフォームコントロール名].Form.RecordSet

    'レコードセットが0件以上の時
    If rs.RecordCount > 0 Then
      'サブフォームのカレントレコード位置を記録
      varBookmark = rs.Bookmark

      'レコードセットの最初のレコードに移動
      rs.MoveFirst

      '最終レコードまで繰り返し
      Do While Not rs.EOF
        rs.Edit
        '完成を代入
        rs![テキストボックス69コントロールソース名] = "完成"
        rs.UpDate
        '次のレコードへ移動
        rs.MoveNext
      Loop

      'カレントレコードを初期状態に戻す
      rs.Bookmark = varBookmark

    Set rs = Nothing
  End If
End Sub

投稿日時: 17/08/17 14:56:03
投稿者: 丘珠

suzuさん何度もありがとうございます。
いただいたコードを下記のように修正し試しましたがサブフォームへ反映されませんいろいろ試しましたが皆目原因がわかりません。
アドバイスをお願いします。
 
 
Private Sub D管受日_AfterUpDate()
  Dim rs As DAO.Recordset
  Dim varBookmark As Variant
 
  'D管受日 に入力された値が日付と判定できるなら
  If IsDate(Me.D管受日) Then
    'サブフォームのレコードセットを参照
    Set rs = Me.[受注DATA].Form.Recordset
 
    'レコードセットが0件以上の時
    If rs.RecordCount > 0 Then
      'サブフォームのカレントレコード位置を記録
      varBookmark = rs.Bookmark
 
      'レコードセットの最初のレコードに移動
      rs.MoveFirst
 
      '最終レコードまで繰り返し
      Do While Not rs.EOF
        rs.Edit
        '完成を代入
        rs![名義] = "完成"
        rs.Update
        '次のレコードへ移動
        rs.MoveNext
      Loop
 
      'カレントレコードを初期状態に戻す
      rs.Bookmark = varBookmark
 
    Set rs = Nothing
  End If
End Sub

回答
投稿日時: 17/08/17 17:04:42
投稿者: Suzu

丘珠 さんの引用:
いろいろ試しました

 
何を試し、どう確認したのでしょうか。
 
 
回答者に具体的なアドバイスを求めるのであれば、
質問者も具体的な文章としてください。
 
もし私が「試し方が足りないんじゃないですか?」みたいな回答をしたら
質問をしている丘珠さんは何をやったら良いか判らず困りますよね。
 
回答者も一緒です。
 
 
コード内容は理解できているのでしょうか。
(かならず理解しなさいと言う話ではないです。現在の丘珠さんの力量を知りたいのです)
 
理解できているにしろ、できていないにしろ、確認は、
 
1. 処理が実際に呼び出させて
2. シングルステップで変数の内容をローカルウィンドの中身、実際のオブジェクトを確認していき、
3. 想定外の処理フローとなっている部分を特定する
 
です。
 
3.を行う上でコードがどんなルートを通るのか、
  セルへの繰り返し処理なら、ここで何をやっているのかワークシートも同時に表示し
  操作対象のセルを表示させながら確認できます。

投稿日時: 17/08/18 09:25:48
投稿者: 丘珠

参考にしてもう少し勉強してトライしてみます。