2016-06-30 3 views
0

두 개의 SO 질문/답변을 결합하여 셀의 특수 문자를 자동으로 바꾸는 VBA를 만들었습니다 (이 예제에서는 E6).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

셀에 공백이 있는지 테스트하려면 if? –

+0

나는 그것이'인터럽트가 아니라면 (타겟, 셀 (6, 5)) 아무것도 없다 '라고 생각했다. 그래서 당신은 ElseIf 셀 (6, 5) .Value = ""Then'' 타입의 것을 추가하는 것을 의미합니까? –

+0

아니요, 해당 행은 대상 셀이 셀 (6,5)과 교차하는지 테스트합니다. 그러나 @ScottHoltzman처럼 보입니다. 당신의 대답이 있습니다. –

답변

1

셀에 다시 기록하기 전에 이벤트 처리기를 해제하십시오. 그렇지 않으면 셀에 다시 쓰면 이벤트 처리기가 다시 실행되고 중지되지 않습니다.

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

못 박았습니다. - 고마워요! –

관련 문제