あなたの「必」の書き順を教えてください

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

A 回答 (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での動きを記述してみましたが、この内容が得たかったものなのかは??

また、他にも方法があるのかもしれません。
    • good
    • 1

どのようなタイミングでの使用になるのか、ご質問内容からわかりませんが、


ヘルプで以下を参照してみてください。

DoCmd.CancelEvent
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/04/10 13:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


おすすめ情報

このQ&Aを見た人がよく見るQ&A