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

このQ&Aのポイント
  • Access 2000を使用してテーブルを元に帳票フォームを作成した。
  • フォームのフッタ部分にテキストボックスとコマンドボタンを配置し、フィルターの動作をさせるためのコードを追加した。
  • テキストボックスの制限に関して、レコードが存在しない状態でテキストを変更しようとするとエラーが発生する。追加は許可しないため、回避方法を探している。
回答を見る
  • ベストアンサー

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/追加の許可」プロパティの違いでそのようなことになるのかは理解できませんが)、ユーザーにデータの変更や追加、削除はさせたくないテーブルなので、追加を許すわけにもいきません。 何かいい回避方法はありませんでしょうか。 よろしくお願いします。

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

  • ベストアンサー
  • TYmamy
  • ベストアンサー率50% (1/2)
回答No.2

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

tsukasa-12r
質問者

お礼

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

その他の回答 (1)

noname#60992
noname#60992
回答No.1

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

tsukasa-12r
質問者

お礼

回答ありがとうございます。 確かに、 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) で 何か文字を入力しようとしてもできなくなってしまいます。

tsukasa-12r
質問者

補足

質問文に誤りがありましたので訂正いたします。 >AllowEdits/更新の許可 >AllowDeletions/削除の許可 >AllowAdditions/追加の許可 >のプロパティは全て「いいえ」にしてあります。 と書いていましたが、AllowEdits/更新の許可は「はい」になっていました。(AllowEdits/更新の許可を「いいえ」にすると、フッタに配置してある txtFilter テキストボックスまでも入力不可になってしまうので。)

関連するQ&A

  • ACCESS2003のテキストボックスの最大桁数について

    Access2003のテキストボックスには、MaxLengthプロパティがありません。変わりに以下のような、コードで対応しようと試みたのですが、いまいち動きが悪いのです。以下のコードは、最大4桁までテキストボックスに入力可能とします。 Private Sub txtBox_KeyPress(KeyAscii As Integer)   If Len(txtBox.Text) > 3 Then     KeyAscii = 0   End If End Sub 最大入力桁数4桁を実現していますが、4桁入力後『Insert』キーを押下して、上書きモードでの修正ができません。 以下例1はOKですが、例2が実現できません。 例1:1回目新規入力『12』 ⇒ 2回目修正『123』⇒3回目修正『1234』 例2:1回目新規入力『1234』 ⇒ 2回目修正『9999』 VBのMaxLengthプロパティのようなことはできないのでしょうか?

  • キー入力を制限しつつ、Ctrl+CやCtrl+Vを活かすには?

    数字とバックスペース以外入力できないテキストボックスTextBoxAを作りました。 Private Sub TextBoxA_KeyPress(KeyAscii As Integer) If KeyAscii <> vbKeyBack Then If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then KeyAscii = 0 End If End If End Sub と記述しましたが、Ctrl+CやCtrl+Vが効きません。 右クリックでコピー、ペーストはできるのですが、コントロールキー によるコピペを可能にするにはどうしたらいいでしょうか? どなたかよろしくお願いします。

  • テキストの入力時、カーソルの移動をスムーズにしたい

     VB6で複数入力項目(テキスト/コンボボックス等)がある画面を作っているのですが、文字が最大桁数に達したら、次のコンボボックスへカーソル(=フォーカス)を移動し、次の入力項目へを行いたいのですが、 どうも思った様に、移動しないです。  以下は半角数字項目が最大文字数に達した場合、次のインプットボックスへフォーカスが移動する様に組んでみました。 Private Sub Txt_Input_KeyPress(KeyAscii As Integer) If KeyAscii <> 8 And (KeyAscii < 48 Or KeyAscii > 57) Then KeyAscii = 0 If Len(Txt_Input.Text) >= (Txt_Input.MaxLength - 1) Then Txt_Input2.SetFocus End If End Sub ところが、バックスペースでも1文字分と捉えてしまう様で、3文字入力の場合等は先頭から入力し直さないと、再入力も儘ならない状態です。 何かバックスペースも自然に効く形で同様の制御は行えないものでしょうか。 (尚、MaxLength - 1の部分は-1しないとフォーカスが動きませんでした。)

  • 特定の文字だけ太文字にするには・・

    簡易チャット作ってます。発言者の名前の部分だけ太文字にしようとしてい ます。 テキストボックス2に文を書いてエンターを押すとテキストボックス1に書 花子:~~~  と書き込まれるようにはできました。花子の部分 だけふと文字にするには?? Private Sub Text2_KeyPress(KeyAscii As Integer) If (KeyAscii = 13) Then Text1.Text = Text1.Text + "花子:" + Text2.Text + vbCrLf Text2.Text = "" KeyAscii = 0 End If End Sub

  • vb作成したらでbeep音が鳴ります。経験あるかたお願いします。

    KeyPressイベントを追加して、データ入力後にエンターキーを押すとbeep音が鳴ります。ほかではescキーも鳴りますが、その他は鳴らないで動くようです。 単純に新規作成から、Form1へtestテキストコントロールを追加して、以下の記述をしただけなのですが、どうしてなるのか原因がわかりません。 Private Sub test_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then test.text="ok" End If End Sub ←この次でbeep音! 環境はvb6.0、windows2000。 仕様なのでしょうか? ハード側の問題なのでしょうか? 経験あるかた宜しくお願い致します。

  • TextをEnterKeyで選んだ後にLISTBOXを非表示

    OSはWin XP home EXCEL2002を使用しています。 ActivecellにリストボックスのデータをEnterKeyで入れた後にリストボックスの表示をFalseにしたいと思っています。以下のようにすると必ずEXCELが落ちてしまいます。 Private Sub ListBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If KeyAscii = vbKeyReturn Then ActiveCell.Value = ListBox1.Text ListBox1.Visible = False End If End Sub 何がいけないのかよく分かりません。悪い部分の解説もできればお願いしたいと思います。よろしくお願いします。

  • ACCESS VBA で複数項目検索にテキストボックスとコンボボックス

    ACCESS VBA で複数項目検索にテキストボックスとコンボボックスを使用したい txtPC番号というテキストボックス、 com所属部門というコンボボックス、 txt使用者というテキストボックスの どれかひとつの条件が入力されたときに 該当するフォームのレコードを抽出できるようにしたいのですが、 コンボボックスで選択した場合のみうまく抽出できません。 コードのどの部分に誤りがあるのでしょうか? ご指摘願えませんでしょうか? よろしくお願いいたします。 Private Sub cmd01_Click() Me.FilterOn = False If Me!txtPC番号 <> "" Then Me.Filter = "[PC番号]like '*" & Me!txtPC番号 & "*'" ElseIf Me!com所属部門 <> "" Then DoCmd.Requery "com所属部門" ElseIf Me!txt使用者 <> "" Then Me.Filter = "[使用者]like '*" & Me!txt使用者 & "*'" End If Me.FilterOn = True End Sub

  • Access2007の、フォーム入力について

    下記のようなコマンドを、ボタンに追加しました。 名前の欄に入力して、ボタンを押すと、レコードの名前フィールドに入力されます。 Private Sub コマンド10_Click() If Nz(Me.名前1, "") <> "" Then CurrentDb.Execute "INSERT INTO 氏名 (名前) SELECT '" & Me.名前1 & "'" End If If Nz(Me.名前2, "") <> "" Then CurrentDb.Execute "INSERT INTO 氏名 (名前) SELECT '" & Me.名前2 & "'" End If If Nz(Me.名前3, "") <> "" Then CurrentDb.Execute "INSERT INTO 氏名 (名前) SELECT '" & Me.名前3 & "'" End If If Nz(Me.名前4, "") <> "" Then CurrentDb.Execute "INSERT INTO 氏名 (名前) SELECT '" & Me.名前4 & "'" End If If Nz(Me.名前5, "") <> "" Then CurrentDb.Execute "INSERT INTO 氏名 (名前) SELECT '" & Me.名前5 & "'" End If DoCmd.Close acForm, "フォーム1" End Sub テキストボックスには、それぞれ名前1~5、という名前がつけられています。レコードが追加されるテーブルは「氏名」です。 そこで、さらにテーブルに部署フィールドを追加して、フォームに上から、部署1~5のテキストボックスを追加し、 名前と部署のテキストボックスの、それぞれ対応しているものが、同じレコードに追加されるようにするには どうすればよいでしょうか? 有識者の皆さま、どうぞよろしくお願いいたします。

  • VB6 テキストとSetfocus

    今テキストボックスからテキストボックスへ focusを写すのをやっていたのですが、 TEXT1 から TEXT2へ入力した後エンターキーを押したらfocusを写すというのを設定したところ ちゃんとカーソルは移動するのですが どうしてもエラー音が出てしまいます。 現在KEYPRESSに If KeyAscii = 13 Then Text2.SetFocus End If このように書いているのですがなにか間違ってるのでしょうか? エラー音を出さない方法をどなたかご教授ください

  • 16進数

    Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii >= Asc("a") And KeyAscii <= Asc("f") Then Else KeyAscii = 0 Beep End If End Sub 上のソースだと数字が入りません。 どうすれば入力できますか。 ※zと入れると強制終了になってしまうので、上のソースを入れたんですが・・・ ※タグが崩れて見にくくてすいません