2016-06-30 15 views
0

私は2つのSO質問/回答を組み合わせて、セル内の特殊文字(この例ではE6)を自動的に置き換えるVBAを作成しました。Excel VBAワークシートのイベントが定数ループでスタックされました

特殊文字の置換には効果的ですが、セルを消去(E6を選択してDeleteキーを押す)すると、一定のループでスタックされます。以下

コード:

Const SpecialCharacters As String = "!,@,#,$,%,^,&,*,(,),{,[,],}" 'modify as needed 

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Not Intersect(Target, Cells(6, 5)) Is Nothing Then 

     Dim myString As String 
     Dim newString As String 
     Dim char As Variant 

     myString = Cells(6, 5).Value 
     newString = myString 

     For Each char In Split(SpecialCharacters, ",") 

      newString = Replace(newString, char, "") 

     Next 

     Cells(6, 5).Value = newString 

    End If 

End Sub 
私が起こってからループを遮断するために Else文を追加しようとしたが、それはうまくいきませんでした

Else 

    Cells(6, 5).Select 

SO質問/回答参照:

excel VBA run macro automatically whenever a cell is changed

Removing special characters VBA Excel

誰かが私が間違っていることについての洞察を提供できますか?

ありがとうございます!

+0

セルが空白かどうかをテストする場合は、あなたに追加しますか? –

+0

は、私は推測する私はそれがない交差(ターゲット、細胞(6、5))されている場合は '何もThen'を処理していたものだと思いました。だからあなたは 'ElseIf Cells(6、5).Value =" "Then'型のものを追加することを意味しますか? –

+0

いいえ、その行は、ターゲットセルがセル(6,5)と交差するかどうかをテストしています。しかし、あなたの答えは@ScottHoltzmanのように見えます。 –

答えて

1

セルに書き戻す前に、イベントハンドラをオフにします。それ以外の場合は、セルに書き戻すとイベントハンドラが再び起動し、それを決して停止しません。

Application.EnableEvents = False 
Cells(6, 5).Value = newString 
Application.EnableEvents = True 
+0

それを釘付けに - ありがとう! –

関連する問題