2017-12-10 21 views
0

私は10以上のテキストコントロールを持つAccessデータベースを持っています。 CTRL + A KeyPressイベントを処理するコードをいくつか用意したいと思います。通常、AccessでCTRL + Aを押すと、すべてレコードが選択されます。私の最終目標は、コントロールのテキストだけを削除できるように、CTRL + Aでそのコントロールのテキストを選択することです(ブラウザのURLバーのCTRL + Aを押して、そのテキストのみを選択するなど)。私はthis articleをチェックしました。テキストボックス(各テキストボックスのKeyPress = 60 +行のコードを処理する)を扱えるようにしたいと思っていました。私は、次のループのために何か方法がありますか?MS AccessマルチコントロールKeyPress Ctrl + Aハンドラー

Function HandleKeyPress(frm As Form, KeyAscii As Integer, ByVal e As KeyPressEventArgs) 'should it be a function or a sub? 
    For Each ctl In Me.Controls 
     If KeyAscii = 1 Then 'I think this is CTRL + A? 
      e.Handled = True 'Stop this keypress from doing anything in access 
      focused_text_box.SelStart = 0 
      focused_text_box.SelLength = Len(focused_text_box.Text) 
     End If 
    Next 
End Function 

これに加えて、このサブ機能にテキストボックスの名前をどのように渡すことができますか?

注:まだ気づいていない場合は、私はまだVBA /アクセスのノブです。

それは(June7が述べたように)だけVBAでそのように動作していない複数のものが含まれていますので、あなたの現在のアプローチは、動作しません
+1

このコードをVBAモジュールに入れましたか?デバッグ>コンパイルを実行しましたか? KeyPressEventArgsのエラーです。これはVB.netクラスと思われ、アクセスする必要のある参照ライブラリがない限り、Access VBAはそれを認識しません。 – June7

+0

あなたが望むのであれば、コントロールの内容を選択して削除することができます。次に、 'control.text =" "' – jsotola

+0

を選択せず​​に削除します。これはエラーが発生する可能性が高いことを知りました。 VBAで何が相当するのか確かめてください。振り返ると、私はちょうどそれを見ていたはずです、私の謝罪。 – Pat

答えて

0

、フォームのKeyDownイベントはあなたが使用することができ、テキストボックスのKeyDownイベント

よりも優先されますので、代わりに(this answer on SUに触発された)次のコードは:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) 
    If KeyCode = vbKeyA And Shift = acCtrlMask Then 'Catch Ctrl+A 
     KeyCode = 0 'Suppress normal effect 
     On Error GoTo ExitSub 'ActiveControl causes a runtime error if none is active 
     If TypeOf Me.ActiveControl Is TextBox Then 
      With Me.ActiveControl 
       .SelStart = 0 
       .SelLength = Len(.Text) 
      End With 
     End If 
    End If 
ExitSub: 
End Sub 

それは、VBAまたは単にプロパティペインを使用して、この機能はデフォルトの動作よりも優先することを可能にするか、TrueにForm.KeyPreviewプロパティを設定することが重要です。

+0

ありがとう! 6月7日は、私の虚偽の質問に対処する必要があることを申し訳ありません!笑申し訳ありませんジュン – Pat