2017-11-09 9 views
2

Excelに新しいので、何か間違ったことを説明してコメントのQをクリアできたら嬉しいですが、VBAはおそらくひどいですが、私は昨日初めて。複数のスプレッドシートに1つのボタンで複数のVBAを実行する

私はすべてのワークシートでキャリッジリターンを1つのボタンでクリアしようとしています。 私は、現在のワークシートにそれらをクリアする方法を見つけたと、これは正常に動作:

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 
関連する問題