システムwiki

キーワットイベントキーワード検索に関するスペースを受け入れない

Julieta 受付中 最終更新日:2021-06-16 00:10

こんにちは、

フォーム上のキーワード検索を使用していますが、単語を入力してスペースバーを持つスペースを追加しようとすると、私のカーソルは単語の最後に戻ります.スペースを受け入れるようにコードを修正し、キーワード検索で別の単語を入力するにはどうすればよいですか?

私はVBAにとって新しいです.以下のコードは、オンラインで見つけたリソースから取得されました.あなたの助けは大いに感謝されます! :)

プライベートサブTXTSEARCH_KEYUP(整数としてのkeyCode、整数としてシフト)

Error Goto ErrHandler

Dim FilterText文字列

"ユーザー入力に基づいてフィルタを適用または更新する.

len(txtsearch.text)>0の場合

filterText= txtsearch.text

me.form.filter= "[SearchQ]![ContractorClientName] "*"&filtertext&"*"や[searchq]![ProjectName]が "*"&filtertext&"*""

me.filteron= true

"更新後の検索ボックスにフィルタテキストを保持します.

txtsearch.text= filterText

txtsearch.selstart= len(txtsearch.text)

txtsearch.selstart= len(置換(txtsearch.text、 "、".")

else

"フィルタを削除します.

me.filter= ""

me.filteron= false

TXTSearch.SetFocus

の場合は終わります

SUB

を終了します

errandler:

msgbox err.number&"-"&err.description、vbokonly、 "エラー..."

終了SUB

返信リスト(回答:11)

8 #
TomvanS

私はキーアップが間違ったイベントだと思います.コードをThetStSearch.Changeイベントに移動します.

応答8# ->にスキップ
9 #
Julieta

私はそれをオンの変更イベントに変更しましたが、それは私にエラーをゲームします:(

応答9# ->にスキップ
10 #
TomvanS

ha!それは面白い.再帰的手順

自分で掘り下げたい場合は、手順の上部にブレークポイントを設定してアプリを実行してください.あなたのブレークポイントが何度も何度も呼ばれます.なぜですか?

応答10# ->にスキップ
7 #
Julieta

私はアポストロフィなしで投稿された行の1つに気づいたが、私がそれを削除したコードを実行したとき.トラブルシューティングVBAが問題ないことではありません:(

txtsearch.selstart= len(txtsearch.text)-これは私が削除された行です.

txtsearch.selstart= len(置換(txtsearch.text、 "、".")

応答7# ->にスキップ
6 #
TomvanS

それを自分でテストせずに、私はこの行がカルプリットであると思うでしょう:

txtsearch.text= filterText

テキストプロパティを設定し、それは変更イベントをトリガーし、そしてやはり...

応答6# ->にスキップ
5 #
Julieta

私がそのコード行を削除した後、それは私にエラーを与えませんが、それでも私にスペースを入力させません.私がするとすぐに、カーソルは単語の最後に戻ります:(

応答5# ->にスキップ
4 #
Imb

こんにちはジュリエタ、

スペースを入力することができますが、コントロールを離れると、後のスペースがAfficeUpdateイベントで削除されます.ユーザーには便利です.

あなたができることは、あなたのText434コントロールの値にスペースを追加するコマンドボタン "add_space"を追加することです(どうぞ、それに機能名を付けてください).コントロールが「コード別」に変更された場合、AfterUpdateイベントは発生しません.

IMB

応答4# ->にスキップ
3 #
julieta

こんにちはLMB、

私は他の基準検索のための検索ボタンがすでに検索ボタンを持っているので、私は本当にコマンドボタンの使用を避けようとしていました:(

このコントロールは、コンボボックスがどのように機能するかと同様に機能するクイック検索になることを望みました.入力すると、オプションのリストが狭くなります.私は別の検索ボックスからコードを持っていましたが、この検索ボックスはリストボックスでレコードを探していました.私はまた、keyPressの上にそのコードをコピーしようとしました:/おそらく私は別のコード行を組み込む必要がありますが、私はただわからない:(

これはキープレスコードです.

プライベートサブTXTSEARCH_KEYPRESS(整数としてのKEYASCII)

'ユーザーがスペースバーを押しているかどうかを識別するために必要です

'入力を無視したい場合は

エラー時に10 ERR_HANDLE

20 keyascii= 32の場合

30 BLNSPACE= true

40 Else

50 BLNSpace= False

60

の場合は終わります

70 SUB

を終了します

err_handle:

80ケースERR.NUMBER

を選択します

ケース

90 msgbox "予期しないエラーが発生しました:"&vbcrlf&err.description&_

vbcrlf&"error"&err.number&"("&erl&")"

100エンド選択

終了SUB

応答3# ->にスキップ
2 #
Imb

こんにちはジュリエタ、

このコードは、スペースが押されたときにBLNSPACE= TRUEです.

私は次にBLNSpaceが何をするのかわかりません.スペースを無視したい場合は、(BLNSPACE= TRUE以外の)KEYASCIIが0に設定されます. しかし、Blnspaceは後でそれをします.

これらの5行をスキップするとどうなりますか?

IMB

応答2# ->にスキップ
1 #
julieta

だから私はスペースが働いていたリストボックスに価値を探していたフォームの1つに戻りました.それをより徹底的に分析した後、私は私がOn Key Pressに関連するコードを逃したことに気づいた!以下のコードは今働いています! :)太字の行は、私が逃した行/修正

ブールとしてのプライベートBLNSpace

プライベートサブTxtSearch_Change()

Error Goto ErrHandler

Dim FilterText文字列

'ユーザー入力に基づいてフィルタを適用または更新する.

blnspace= false

Me.Refresh 'テキストボックスが変更されていることを確認するには、実際にを使用できるようにしてください.

len(txtsearch.text)>0の場合

filterText= txtsearch.text

me.form.filter= "[SearchQ]![ContractorClientName] '*"&filtertext&"*'や[searchq]![ProjectName]が '*"&filtertext&"*'"

me.filteron= true

'更新後の検索ボックスにフィルタテキストを保持します.

txtsearch.setfocus

txtsearch.selstart= len(txtsearch.text)+ 1

else

'フィルタ

を削除します

me.filter= ""

me.filteron= false

TXTSearch.SetFocus

の場合は終わります

の場合は終わります

SUB

を終了します

errandler:

msgbox err.number&"-"&err.description、vbokonly、 "エラー..."

終了SUB

プライベートサブTXTSearch_gotFocus()

'コントロールがフォーカスになるとプロンプトを削除するために使用されます

10 ON ERROR RESUME NEXT

20 if me.txtsearch.value= "(検索入力)"

30 ME.TXTSearch.Value= "" "" "" "

40

の場合は終わります

終了SUB

プライベートサブTXTSEARCH_KEYPRESS(整数としてのKEYASCII)

'ユーザーがスペースバーを押しているかどうかを識別するために必要です

'入力を無視したい場合は

エラー時に10 ERR_HANDLE

20 keyascii= 32の場合

30 BLNSPACE= true

40 Else

50 BLNSpace= False

60

の場合は終わります

70 SUB

を終了します

err_handle:

80ケースERR.NUMBER

を選択します

ケース

90 msgbox "予期しないエラーが発生しました:"&vbcrlf&err.description&_

vbcrlf&"error"&err.number&"("&erl&")"

100エンド選択

終了SUB