
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
access テキストボックスの値取得
Access(アクセス)
-
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
Access VBAで行ラベルが定義されていないというエラーが出ます
Access(アクセス)
-
-
4
MS Accessでフォームの「開く時」と「読込み時」のイベントの違い
Access(アクセス)
-
5
テキストボックスのvalueとtextの違い
Visual Basic(VBA)
-
6
VBA テキストボックスを選択状態にしたい
その他(プログラミング・Web制作)
-
7
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
8
アクセス2016 チェックボックス☑表記が-1,0表記になってしまったので直す方法
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのフィールド数が255しか...
-
ExcelのデータをコピーでACCESS...
-
SQLServer2005のSQL文での別名...
-
ACCESSでの改行コード
-
INSERT INTO ステートメントに...
-
FileMakerについて
-
アクセス エラーを数値「0」に...
-
フォームのデータシートビュー...
-
accessのレポートで元になるテ...
-
アクセスで複数行の一括入力す...
-
view作成時にデータ型を変更し...
-
ACCESS レーダーチャートのデー...
-
ACCESSでテーブルのチェックを...
-
ACCESSでオートナンバーを任意...
-
Accessでテーブルの値をテキス...
-
Access 昇順・降順で並び替え...
-
accessで重複を防ぎたい
-
テーブルからレコードを(在れ...
-
【Access】フォームで自動計算...
-
Access:リンクテーブルマネー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
INSERT INTO ステートメントに...
-
SQLServer2005のSQL文での別名...
-
accessのレポートで元になるテ...
-
Accessのフィールド数が255しか...
-
Accessでテーブルの値をテキス...
-
ACCESSで400以上のフィールドが...
-
ExcelのデータをコピーでACCESS...
-
Accessで、固定アルファベット+...
-
ACCESSで和暦を西暦に・・・
-
ACCESSでの改行コード
-
ACCESSでテーブルのチェックを...
-
【Access】フォームで自動計算...
-
アクセス メモ型 255文字...
-
ACCESSでオートナンバーを任意...
-
アクセス エラーを数値「0」に...
-
主キーはオートナンバー型のID...
-
固有レコード識別子の選択とは??
-
accessで重複を防ぎたい
-
Access:リンクテーブルマネー...
-
Access 昇順・降順で並び替え...
おすすめ情報