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

解決済みの質問

Access の非連結テキストボックスについて

Access 2000 を使用しています。
フィールド名 データ型
Code     テキスト型(フィールドサイズ=8)
Name     テキスト型(フィールドサイズ=50)
というテーブルがあり、このテーブルを元に帳票フォームを作成しました。このフォームは参照用として使用したいので、
AllowEdits/更新の許可
AllowDeletions/削除の許可
AllowAdditions/追加の許可
のプロパティは全て「いいえ」にしてあります。
このフォームのフッタ部分に txtFilter というテキストボックスと cmdFilter というコマンドボタンを置き、フィルターの動作をさせるため、
Private Sub cmdFilter_Click()
  If IsNull(txtFilter.Value) Then
    FilterOn = False
  Else
    Filter = "Code LIKE """ & txtFilter.Value & "*"""
    FilterOn = True
  End If
End Sub
としました。(見やすくするため全角空白を使用しています。)
さらに、txtFilter に 8文字 ( Code フィールドのフィールドサイズ ) 以上は入力できないようにしようと思い、
Private Sub txtFilter_KeyPress(KeyAscii As Integer)
  If KeyAscii <> 8 Then
    'Delete 以外の場合
    If Len(txtFilter.Text) = 8 Then
      KeyAscii = 0
    End If
  End If
End Sub
としましたが、ここで問題が起きました。
・FilterOn = False
あるいは、
・FilterOn = True でも何レコードが表示されている状態(該当レコードが存在する文字が txtFilter に入力されている)
という場合は良いのですが、該当レコードが存在しない場合、 txtFilter に入力されている文字を変更しようとすると、
txtFilter_KeyPress() 中の
If Len(txtFilter.Text) = 8 Then
のところで「実行時エラー'2185' コントロールがフォーカスを取得していないときに、コントロールのプロパティまたはメソッドを参照することはできません。」となってしまいます。
入力中のコントロールですから、「そんな馬鹿な!?」という感じなんですが、
If Len(txtFilter.Text) = 8 Then
の前に
txtFilter.SetFocus
を入れても状況は同じでした。
フォームの「AllowAdditions/追加の許可」プロパティを「はい」にすれば、上記のようなエラーは発生しないのですが(なぜ、「AllowAdditions/追加の許可」プロパティの違いでそのようなことになるのかは理解できませんが)、ユーザーにデータの変更や追加、削除はさせたくないテーブルなので、追加を許すわけにもいきません。
何かいい回避方法はありませんでしょうか。
よろしくお願いします。

投稿日時 - 2007-08-08 23:52:23

QNo.3239716

暇なときに回答ください

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

フォームのプロパティではなく、
テーブルのレコードのテキストボックスのプロパティで、
データのタブの下の方にある、使用可能を「いいえ」、
編集ロックを「はい」にすればいいと思われます。

投稿日時 - 2007-08-09 12:54:36

お礼

回答ありがとうございます。
なるほど、そういう手がありましたね。思いつきませんでした。

投稿日時 - 2007-08-09 23:39:21

ANo.2

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

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

回答(2)

ANo.1

accessでは
If Len(txtFilter.Text) = 8 Then

If Len(txtFilter.Value) = 8 Then
にするとできるのではなかったかな?
なぜだか詳しく追求したことはありません。

投稿日時 - 2007-08-09 08:15:10

補足

質問文に誤りがありましたので訂正いたします。

>AllowEdits/更新の許可
>AllowDeletions/削除の許可
>AllowAdditions/追加の許可
>のプロパティは全て「いいえ」にしてあります。

と書いていましたが、AllowEdits/更新の許可は「はい」になっていました。(AllowEdits/更新の許可を「いいえ」にすると、フッタに配置してある txtFilter テキストボックスまでも入力不可になってしまうので。)

投稿日時 - 2007-08-09 23:28:47

お礼

回答ありがとうございます。
確かに、
If Len(txtFilter.Text) = 8 Then

If Len(txtFilter.Value) = 8 Then
に変更しますと、実行時エラーは発生しなくなりますが、目的の動作にはなりません。

例えば、
(1) txtFilter に ABCDEFGH と入力
(2) cmdFilter クリック ( Filter がセットされ、該当レコードなしになる )
(3) txtFilter の ABCDEFGH を削除 ( Delete または BackSpace で削除 )
(4) txtFilter に AAA を入力
という操作をする場合ですと、
(3) ~ (4) の KeyPress イベント中は、
txtFilter.Value = "ABCDEFGH"
になっていますので、(4) で 何か文字を入力しようとしてもできなくなってしまいます。

投稿日時 - 2007-08-09 23:28:30

あなたにオススメの質問