• ベストアンサー

accessでイベントを中止するようなコマンドはあるのでしょうか?

accessでイベントを中止するようなコマンドはあるのでしょうか? excel vba でのenableevents=falseのようなものはあるのでしょうか?

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

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

#1です > 文字を入れ替え、その入れ替えた文字を再度テキストボックスに入力したい ここでの「再度」を理解できていないのですが。 どのような記述になっているのでしょうか。 テキストボックス「txt1」に、"(1)" の入力で "第一章" に置き換えるものとした場合、 Private Sub txt1_Change()   If (Me.txt1.Text = "(1)") Then     Me.txt1.Text = "第一章"   End If End Sub の様な記述になっていると、 Me.txt1.Text = "第一章" によって、Change イベントが発生します。 Me.txt1.Value = "第一章" または、 Me.txt1 = "第一章" とすることで、イベントを発生させずに値を代入することができます。 ただ、これをすると、更新前処理、更新後処理も発生しないことになります。 更新前処理、更新後処理も発生させつつ、2度処理しないようにする時には、 (a) フラグ制御する Dim bFound As Boolean Private Sub txt1_Change()   If (Not bFound) Then     If (Me.txt1.Text = "(1)") Then       bFound = True       Me.txt1.Text = "第一章"     End If   End If   bFound = False End Sub フラグが立っていない時だけ、判別/処理する。 Me.txt1.Text = "第一章" をした時点で、変更時/更新前処理/更新後処理まで動き切ります。 (b) 変更時処理を一旦無しにする Private Sub txt1_Change()   Dim sTmp As String   If (Me.txt1.Text = "(1)") Then     sTmp = Me.txt1.OnChange     Me.txt1.OnChange = ""     Me.txt1.Text = "第一章"     Me.txt1.OnChange = sTmp   End If End Sub Me.txt1.Text = "第一章" する前に、変更時イベントを受け取らないようにします。 Me.txt1.OnChange に "[Event Procedure]" や "[イベント プロシージャ]" が設定されていると、 Private Sub txt1_Change() が呼び出されます。 Me.txt1.Text = "第一章" をした時点で、更新前処理/更新後処理まで動き切ります。 動き切った時には、他へコントロールが移動しても再度イベントが発生することはありません。 Me.txt1.Text に値を代入しなかった場合は、 他のコントロールに移動した時点で、更新前処理、更新後処理が動きます(変更していたら) Me.txt1.Text への設定は、txt1へフォーカスがある時だけ有効です。 他の処理をしつつ、txt1へ代入&変更時/更新前処理/更新後処理を動かしたい時には、 例えば、ボタンがクリックされた時に Me.txt1.SetFocus Me.txt1.Text = "第二章" と記述します。 2007での動きを記述してみましたが、この内容が得たかったものなのかは?? また、他にも方法があるのかもしれません。

その他の回答 (1)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

どのようなタイミングでの使用になるのか、ご質問内容からわかりませんが、 ヘルプで以下を参照してみてください。 DoCmd.CancelEvent

con014057
質問者

お礼

changeイベントで、テキストボックスに入力された文字を確認して条件を満たせば、 文字を入れ替え、その入れ替えた文字を再度テキストボックスに入力したいのですが、 changeイベントが繰り返されてしまいます。