2017-11-15 12 views
0

最後の質問からの拡張として、私はすべてのワークシートでマクロを実行しようとしています。 ワークシート名をハードコード化できないと言われていますので、現在のソリューションを変更する必要があります。ExcelのVBAは、シートのダイナミックレンジに渡ってマクロを実行します

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 

私は、しかし、私は私の限られたVBAの知識が不足しており、ぼんやりとこの見つめて2日後に感じ、私はこだわっている各ワークシートの名前を収集Forループで配列を移入しようとしました、I量と名前が変わる可能性のあるシートの範囲でこのマクロを動作させる方法についてのいくつかの指摘を本当に感謝しています。

あなたがコメントで必要な任意のより多くの情報を提供させていただき

+0

ブック内のすべてのワークシートまたは選択を意味しますか? – SJR

+0

@sjrすべてのワークシート。 – TurboTemple

答えて

3

:のみ選択したシートについて元のコードの行に沿ってインデックスを使用することもできます)。

Sub RemoveCarriageReturns() 

Dim MyRange As Range 
Dim ws As Worksheet 

Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 

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

Application.ScreenUpdating = True 
Application.Calculation = xlCalculationAutomatic 

End Sub 
+1

これは完璧に働いた、ありがとう! – TurboTemple

0
Public Function GetSheetNames(ByVal wbk As workbook) As String() 
    Dim names() As String 
    Dim count As Integer 
    Dim i As Integer 

     count = wbk.Worksheets.count 

     ReDim names(count - 1) 
     For i = 1 To wbk.Worksheets.count 
      names(i - 1) = wbk.Worksheets(i).Name 
     Next 

     GetSheetNames = names 

    End Function 

使用法:GetSheetNames(Application.ActiveWorkbook)

UPDATE:あなたは(このようにそれを行うことができます

Public Function GetActiveSheetNames(ByVal wbk As workbook) As String() 
Dim names() As String 
Dim count As Integer 
Dim i As Integer 

    count = wbk.Windows(1).SelectedSheets.count 

    ReDim names(count - 1) 
    For i = 1 To wbk.Windows(1).SelectedSheets.count 
     names(i - 1) = wbk.Windows(1).SelectedSheets(i).Name 
    Next 

    GetActiveSheetNames = names 

End Function 
+0

答えがありがとう、私はもう少し単純なものとして他のものを選んだし、私よりもVBAについてはあまり知らない人にこれを説明しなければならない。 – TurboTemple

関連する問題