2017-03-10 5 views
0

1つのマクロを一般化して複数のレポートで使用できるようにしようとしています。問題はそれはいつもすべてがあるとは限らないということです。一つはヘッダーがありません。一つは "this one"という列があり、一つは5枚あります。 1.常にすべての行と列のサイズを自動調整します。 2.常に最初の行をフリーズします。 3.ヘッダー行を削除します(ある場合) 4.常にタブをaパターン(赤、青、緑、黄色、オレンジは各シートごとに繰り返します) 5.列名で列のリストを非表示にします(これはレポートのどこにあっても同じです)。 凍結された一番上の行がフィルタリング可能であること(ctrl shift lを押すなど)Excel Vbaマクロはいくつかのものを注文します

私はこれが正しい軌道にあると思いますが、できるだけ最善を尽くしているとは思えません。エラープルーフ(正しいタブ数や列名があれば失敗しないようにする)個々のマクロすべてを次々に呼び出します。

ありがとうございます!

Sub Auto_Size_Columns() 
' Autosize the column after filling it all in. 
Columns("A:CO").Select 
Columns("A:CO").EntireColumn.AutoFit 
Range("A1").Select 
Selection.AutoFilter 
Call Freeze_Top_Panes 
End Sub 

Sub Freeze_Top_Panes() 
Application.ScreenUpdating = False 
Rows("2:2").Select 
ActiveWindow.FreezePanes = True 
Application.ScreenUpdating = True 
Call Auto_Size_Columns_Again 
End Sub 

Sub Auto_Size_Columns_Again() 
' Autosize the column after filling it all in. 

Columns("A:CO").Select 
Columns("A:CO").EntireColumn.AutoFit 
Range("A1").Select 
Selection.AutoFilter 
Call Delete_Header_Row 
End Sub 

Sub Delete_Header_Row() 
'delete the extra header row 
Rows("1:1").Select 
Selection.Delete shift:=xlUp 
Range("A1").Select 
Call Tab_Color_Change 
End Sub 

Sub Tab_Color_Change() 
Sheets("Sheet2").Tab.ColorIndex = 3 
Sheets("Sheet3").Tab.ColorIndex = 4 
Sheets("Sheet4").Tab.ColorIndex = 5 
Sheets("Sheet5").Tab.ColorIndex = 6 
Sheets("Sheet6").Tab.ColorIndex = 7 
Sheets("Sheet7").Tab.ColorIndex = 8 
Sheets("Sheet8").Tab.ColorIndex = 9 
Sheets("Sheet9").Tab.ColorIndex = 10 
Sheets("Sheet10").Tab.ColorIndex = 11 
Sheets("Sheet11").Tab.ColorIndex = 12 
Sheets("Sheet12").Tab.ColorIndex = 13 
Sheets("Sheet13").Tab.ColorIndex = 14 
Call Hide_Columns 
End Sub 

Sub Hide_Columns() 
Dim s As Worksheet, N As Long, i As Long 
For Each s In Worksheets 
    s.Activate 
    N = Cells(1, Columns.Count).End(xlToLeft).Column 
    For i = 1 To N 
     If Left(Cells(1, i).Value, 6) = "this one" Then 
      Cells(1, i).EntireColumn.Hidden = True 
     End If 
    Next i 
Next s 
Call Auto_Size_Columns_Last 
End Sub 

Sub Auto_Size_Columns_Last() 
' Autosize the column after filling it all in. 

Columns("A:CO").Select 
Columns("A:CO").EntireColumn.AutoFit 
Range("A1").Select 
Selection.AutoFilter 
End Sub 
+0

私の回答が問題を解決するのに十分な解決策を提供している場合は、回答としてマークしてください。そうでない場合は、質問にさらに明確にしてください –

答えて

2

まず、現在のブックのすべてのページをループする方法を調べることをお勧めします。

Sub DoSheetActions() 
    Dim wb As Workbook 
    Set wb = ThisWorkbook 
    Dim ws As Worksheet 
    Dim CurrentColorIndex As Integer 
    For Each ws In wb.Sheets 
     'Execute commands for each sheet 
     'To do this, you'll need to pass the each sheet to the Subroutine. 
     Auto_Size_Columns ws 

     'Increase the ColorIndex each time we iterate over a new sheet 
     CurrentColorIndex = CurrentColorIndex + 1 
     'Retrieve a new ColorIndex 
     ws.Tab.ColorIndex = Tab_Color_Change(CurrentColorIndex) 
    Next ws 
End Sub 

各シートをループしているので、各シート上で任意の数のアクションを1つずつ呼び出すことができます。 Auto_Size_Columnsはかなり簡単です。

Sub Auto_Size_Columns(ws As Worksheet) 
    'And to be honest, Auto_Size_Columns() probably 
    'doesn't need to be a Sub as it only has one statement. 
    'Using Worksheet.UsedRange we can find 
    'all the columns (as long as there isn't a gap) 
    ws.UsedRange.Columns.AutoFit 
End Sub 

次に、私たちはどのように多くのシートの私たちが繰り返し処理しました(CurrentColorIndex)に基づいて、使用する色を決定するための機能を使用することにより、ブック内のシートのN数のためのシートの色のインデックスをアドレス設定することができます。

'Passing ColorIndex byref so this function can change the value 
'You could also use a Switch to get a more robust method to 
'determine which color index to return 
Function Tab_Color_Change(ByRef ColorIndex As Integer) As Integer 
    'So if the value is less than 3, it starts off as 3. 
    If (ColorIndex < 3) Then 
     ColorIndex = 3 
    'If the value is greater than 14, start back at 3. 
    ElseIf (ColorIndex > 14) Then 
     ColorIndex = 3 
    End If 

    'Return the color 
    Tab_Color_Change = ColorIndex 
End Function 

私がカバーしていないのは、ヘッダーが存在する場合は削除することだけでした。しかし、ヘッダーが存在するかどうかを判断するには、すべてのシートに共通のヘッダー列が必要です。存在する場合は、Row 1を安全に削除できます。そうしないと、データを削除することになります。

これは、あなたの将来の努力のための出発点と見方が異なることを願っています。乾杯。

関連する問題