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/追加の許可」プロパティの違いでそのようなことになるのかは理解できませんが)、ユーザーにデータの変更や追加、削除はさせたくないテーブルなので、追加を許すわけにもいきません。
何かいい回避方法はありませんでしょうか。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
フォームのプロパティではなく、
テーブルのレコードのテキストボックスのプロパティで、
データのタブの下の方にある、使用可能を「いいえ」、
編集ロックを「はい」にすればいいと思われます。
No.1
- 回答日時:
accessでは
If Len(txtFilter.Text) = 8 Then
を
If Len(txtFilter.Value) = 8 Then
にするとできるのではなかったかな?
なぜだか詳しく追求したことはありません。
この回答への補足
質問文に誤りがありましたので訂正いたします。
>AllowEdits/更新の許可
>AllowDeletions/削除の許可
>AllowAdditions/追加の許可
>のプロパティは全て「いいえ」にしてあります。
と書いていましたが、AllowEdits/更新の許可は「はい」になっていました。(AllowEdits/更新の許可を「いいえ」にすると、フッタに配置してある txtFilter テキストボックスまでも入力不可になってしまうので。)
回答ありがとうございます。
確かに、
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) で 何か文字を入力しようとしてもできなくなってしまいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSでの改行コード
-
アクセス エラーを数値「0」に...
-
Accessでテーブルの値をテキス...
-
ExcelのデータをコピーでACCESS...
-
SQLServer2005のSQL文での別名...
-
INSERT INTO ステートメントに...
-
ACCESS2000「定義されているフ...
-
Accessのフィールド数が255しか...
-
Accessで、固定アルファベット+...
-
ACCESSで400以上のフィールドが...
-
accessで重複を防ぎたい
-
Access 昇順・降順で並び替え...
-
ACCESSでテーブルのフィールド...
-
ACCESSで和暦を西暦に・・・
-
アクセス A列コピー B列貼り...
-
accessのレポートで元になるテ...
-
ACCESSでオートナンバーを任意...
-
acsessのSQLでフィールド名と説...
-
Access2003 空レコード挿入
-
主キーはオートナンバー型のID...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでテーブルの値をテキス...
-
アクセス エラーを数値「0」に...
-
ACCESSでの改行コード
-
Accessのフィールド数が255しか...
-
accessのレポートで元になるテ...
-
Accessで、固定アルファベット+...
-
INSERT INTO ステートメントに...
-
Access 昇順・降順で並び替え...
-
ExcelのデータをコピーでACCESS...
-
SQLServer2005のSQL文での別名...
-
ACCESSで400以上のフィールドが...
-
アクセス VBAで列の入れ替...
-
IT用語について質問です。 以前...
-
【Access】フォームで自動計算...
-
accessで重複を防ぎたい
-
ACCESSでテーブルのチェックを...
-
ACCESSで和暦を西暦に・・・
-
アクセス メモ型 255文字...
-
主キーはオートナンバー型のID...
-
ACCESSでオートナンバーを任意...
おすすめ情報