2017-11-09 3 views
2

Excel에 새로 추가되어 설명에 문제가있는 부분을 설명해 주면 실례합니다. VBA는 가장 가능성이 높지만 어제는 처음으로.하나의 버튼으로 여러 스프레드 시트에서 VBA 실행

단일 단추를 사용하여 모든 워크 시트에서 캐리지 리턴을 지우려고합니다. 내가 현재 워크 시트에서 그들을 취소하는 방법을 발견했는데이 잘 실행 :

Sub RemoveCarriageReturns() 
Dim MyRange As Range 
Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 

For Each MyRange In ActiveSheet.UsedRange 
    If 0 < InStr(MyRange, Chr(10)) Then 
     MyRange = Replace(MyRange, Chr(10), "") 
    End If 
Next 

Application.ScreenUpdating = True 
Application.Calculation = xlCalculationAutomatic 
End Sub 

나는이 모든 워크 시트를 통해 실행 갈 수있는 여러 가지 방법으로 검색 한, 그러나 아무도 나의 현재를 제대로 작동하지 코드는 다음과 같습니다

Sub RemoveCarriageReturns() 
Dim MyRange As Range 
Dim ws As Worksheet 
Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 

For Each ws In Worksheets 
    For Each MyRange In ActiveSheet.UsedRange 
    Select Case UCase(ws.Name) 
      Case "OTCUEXTR", "OTFBCUDS", "OTFBCUEL" 
       With ws 
       If 0 < InStr(MyRange, Chr(10)) Then 
       MyRange = Replace(MyRange, Chr(10), "") 
       End If 
       End With 
    End Select 
    Next 
Next ws 

Application.ScreenUpdating = True 
Application.Calculation = xlCalculationAutomatic 
End Sub 

나는 그것의 모든 시트를 통해 실행하는 것을 볼 수 있지만, 아무것도 첫 번째 시트를 넘어 변하지 않는 내가 잘못 여기서 뭘하는지에 대한 조언을 (잘 작동하고 캐리지 리턴을 제거합니다.)?

죄송하지만 지금까지 답변을 드리지 못했다면 지금까지 온라인에서 해결책을 찾을 수 없었습니다.

도움 주셔서 감사합니다.

+0

왜 찾아 통합 문서가 아닌 워크 시트에 대체 사용할 수 있습니까? –

+1

당신은 올바른 길을 가고 있습니다. 'ActiveSheet'를'ws'로 바꾸면됩니다. – newacc2240

+0

@ newacc2240 님, 빠른 응답에 감사드립니다. 그런 빠른 수정, 그러나 나는 그 하하를 발견하기 위해 영원히 투옥했을 것입니다. – TurboTemple

답변

1
  1. 제 생각에 ActiveSheet은 화면에 표시되는 시트입니다. (내가 틀렸다면 정정 해줘 주시기 바랍니다.) 당신은 여전히이 방법을 사용하려면, 당신은 당신의 코드에서 ws.Activate

  2. 에 의해 먼저 활성화해야, 그것은 사용되는 모든 셀에 대한 ws.name을 확인합니다. 성능이 떨어질 수 있습니다. 더 좋은 방법은 먼저 이름을 확인한 다음 물건을 확인하는 것입니다. 당신의 경우에는, 단지 3 개의 워크 시트를 찾고 그 이름을 이미 알고 있기 때문에 배열을 먼저 설정하는 것이 적절한 방법 일 것입니다.

...

Sub RemoveCarriageReturns() 
    Dim MyRange As Range 
    Dim NameList() As Variant 
    NameList = Array("OTCUEXTR", "OTFBCUDS", "OTFBCUEL") 
    Application.ScreenUpdating = False 
    Application.Calculation = xlCalculationManual 

    For i = 0 To 2 
     With Worksheets(NameList(i)) 
      For Each MyRange In .UsedRange 
       If 0 < InStr(MyRange, Chr(10)) Then 
        MyRange = Replace(MyRange, Chr(10), "") 
       End If 
      Next MyRange 
     End With 
    Next i 

    Application.ScreenUpdating = True 
    Application.Calculation = xlCalculationAutomatic 
End Sub 
관련 문제