次の方法で共有

テキストボックスに入力できたりきなかったりするのはなぜ?

Anonymous
2013-10-16T06:02:01+00:00

帳票表示用のフォームがあり、フォームを開いて帳票表示をさせた後で 表示されているデータにフィルタをかけて 条件に一致したデータのみを表示させるようにしたいと考え、フォーム show_play を作りました。 フォームのデータプロパティは以下のような設定にしてあります。

フィルタは

のように「期間限定」(コントロール名はlimit_term_go)の埋め込みマクロとして登録してあります。マクロで使っている start_d などは非連結のテキストボックスで以下のようにプロパティを設定しています。

この帳票は正常に動作して、期間指定のために start_d  や end_d  にマウスを合わせてクリックしてキー入力することができます。

しかし、このフォームをコピーして名前を変えて貼り付けた別の帳票 show_course_score は フォームのデータプロパティの設定も show_play とほとんど同じ、違いは 以下のようにレコードソースだけ。

期間限定ボタン(コントロール名は limit_term_go)の埋め込みマクロも 下のように show_play とほとんど同一、違いは フォーム名称のみ。

start_d などのコントロールのプロパティ設定も

のように show_play の場合と同じです。

しかし、このshow_course_score フォームでは start_d や end_d にデータを入れようとしてテキストボックスの上でマウスをクリックしてもデフォルトで表示されている数値(日付)が選択され反転表示されますが、キー入力をまったく受け付けてくれません。フィルタとして機能していることは確認できます。start_d などにキー入力できませんが、default で値を設定しておくと その値を使ってフィルタリングできます。

このフォームを作って動作確認しているときには start_d や end_d には入力できていたのですが、動作確認を継続中に(フォームも多少手を加えました)、ある時点以降(これが具体的に何をした後なのかが解らないので、両方のフォームの設定の違いを調べたのですが、上のように違いが無いように思えます。)から入力できなくなり、以降何をしても(たとえば フォームのデータプロパティの 追加の許可 や 削除の許可 などを 「はい」に変えても状況は何も変わりませんでした。

質問事項:

上のように一見同じに見えるフォームの一方でテキストボックス入力が可能で、他方では入力が不可能(選択できるがキー入力を受け付けない)という場合、何に原因があると考えられるでしょうか?

フォームのプロパティなどは同じに見えます、原因究明のためには、ほかにどのような違いを調べるべきでしょうか?

調べるためのヒントなどいただければありがたく存じます。

よろしくお願いします。

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2013-10-24T09:11:44+00:00

yamaoyapi さん、こんにちは。

確認結果の書き込みありがとうございます。

DoCmd.OpenForm で該当のフォームを開いていて、その時の設定が acFormReadOnly になっていたんですね。

要因がわかり、安心しました。

(こちらで気が付くことができず、すみません。。。)

役に立ちそうなページがあったので紹介しておきますね。

OpenForm メソッド

また何かありましたら、当フォーラムをご利用ください。

この回答は役に立ちましたか?

0 件のコメント コメントはありません

3 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2013-10-18T01:20:41+00:00

    楠部 さん、

    その後 VBA をいろいろ変化させたりして VBA のどのコード部分が 影響しているのかを調べていたら、VBA の有無に無関係に 入力不可であることが解りました。 VBAを削除したら一時的に入力可能になったのがとても不思議だったのですが、これはフォームを直接フォームビューで開いたためでした。(このフォームを開くためのボタンを押して開けばやはり入力不可)

    で、フォームの開き方の違いを調べていたら、うまくいくフォームは埋め込みマクロで開いており、書き込めないフォームは VBAを使って 

     DoCmd.OpenForm "show_course_score", acNormal, , , acFormReadOnly, acWindowNormal, Me![sel_course_name]

    として ReadOnly で開いていることが違いでした。

    show_course_score フォームでは表示されるレコードを変更することはなく 既存のレコードを読むだけなのであえて ReadOnly を使ってみたのですが、これが悪かったようです。RealOnly というのはフォームで見ているレコードに対しての属性と勘違いしてました。Form自体がReadOnly で一切の書き込みができない という意味のようですね。 そういえば、フォームのデータプロパティ 変更の許可「はい」「いいえ」もフォームに表示されているレコードの更新の許可というより フォームそのものへの書き込み(レコードに無関係なテキストボックスへの書き込みもこれによって制御される)という意味で、結局 あらゆる書き込みを許可しないことで更新を許可しないという仕組みになているようですから、ReadOnly で開いたフォームに一切の書き込みができないのも、今考えれば当然とも思えます。

    お騒がせしましたが、結局 フォームの開き方を acFormReadOnly としていたのが原因で、起こるべくして起こった現象だとわかりました。

    モデレータの権限で 最初の私の質問に これは起きるべくして起こった問題で、フォームを開くときのopenForm の引数DataMode にacFormReadOnly (読み取り専用)をセットしていたために フォームに一切の入力が不可だったというようなことが判るコメントをつけていただけませんでしょうか?

    お手数をおかけしますがよろしくお願いいたします。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2013-10-17T14:04:31+00:00

    楠部 さん、

    コメントありがとうございます。うまく動かない(テキストボックスに書き込みができない)フォームに設定してあったVBAを削除したら 書き込みができるようになりました。しかし、このVBAは問題となっているテキストボックスと何の関係もありません。本メール末に コードを示してあります。

    このVBAのどこに テキストボックスへの書き込みを禁止する要因があるのでしょうか?

    よろしくお願いします。

    > [start_d]、[end_d] テキスト ボックス の各イベントには何も設定していない前提

    << はい、その通りです、イベントには何も設定していません。

    > フォームの該当のテキスト ボックスをいったん削除して、作り直すとどのようになるか試してみてはどうでしょうか。

    << いったん削除して、もう一度作り直してみました、しかし結果は同じでした。

    また、フォーム上に新規にマクロにもVBAにもボタンにも何の関係もない非連結のテキストボックスを作って、このデータプロパティの設定を 利用可能「はい」 編集ロック「いいえ」に設定しても カーソルをここへ移動できますが、キー入力はまったくできません。

    >  [レコードソース] の指定方法、[規定値を取得] と [読み込み時に並び替えを適用] の設定が異なっているは少し気になる

    << 正常に動くフォームと同じにしましたが、まったく変わりません。ダメです。

    両者の違いとして 書き込めないフォームの方は フォームを開くときのイベントに 以下のVBA を登録してあります。正常に動くフォームは このVBA は登録してありません。

    Private Sub Form_Open(Cancel As Integer)

    Dim c_ix As Integer

    Dim db As DAO.Database

    Dim rs As DAO.Recordset

      Me![c_id] = Me.OpenArgs   << 受け取った引数を 非表示のテキストボックスに保存しています。

    Set db = CurrentDb()

    Set rs = db.OpenRecordset("course_data_table", dbOpenDynaset)

    Me![course_name_show] = DLookup("course_name", "course_data_table", "[id]=" & Me![c_id])

    <<< フォームヘッダに ゴルフ場名をセット

    c_ix = DLookup("club_name", "course_data_table", "[id]=" & Me![c_id])

    Me![club_name_show] = DLookup("club_name", "club_name_table", "[id]=" & c_ix)

    <<< フォームヘッダに コース名をセット

    i = 1

    Do While i <= 9   <<9ホール分 

       Select Case rs("p" & i) << パー数に応じてSH(ショート)、MDL(ミドル)、LNG(ロング)の表示をセット

         Case 3

            Me("pp" & i) = "SH"  << テキストボックス[pp1][pp2][pp3]などはフォームヘッダにあります

         Case 4

            Me("pp" & i) = "MDL"

         Case 5

            Me("pp" & i) = "LNG"

       End Select      

       i = i + 1

    Loop

    Set rs = Nothing

    End Sub

    このVBAを削除したら テキストボックスに書き込みができるようになりましたが、このVBAのどこに このVBAとは無関係なテキストボックスに書き込みができなくなる処理が含まれているのでしょうか?

    よろしくお願いします。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2013-10-17T04:04:42+00:00

    yamaoyapi さん、こんにちは。

    マイクロソフト コミュニティ への投稿ありがとうございます。

    フォームに配置しているテキスト ボックスへの文字入力の際の動作についての質問ですね。

    [show_course_score] フォームの [start_d]、[end_d] テキスト ボックス の各イベントには何も設定していない前提で考えてみました。

    ふたつのフォームの [レコードソース] の指定方法、[規定値を取得] と [読み込み時に並び替えを適用] の設定が異なっているは少し気になるのですが、[show_course_score] フォームの該当のテキスト ボックスをいったん削除して、作り直すとどのようになるか試してみてはどうでしょうか。

    確認結果の返信、お待ちしています。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません