在多个工作表中运行一个宏

时间:2018-06-21 00:43:10

标签: excel vba excel-vba worksheet

如何使宏不仅在此工作表中运行,还应在其他工作表中运行?

意思是当我有两个或更多相同的工作表并且我希望同一个宏在两个单独的工作上都由按钮触发。

Sub sort_test()
'
' sort_test Macro
'
'
    Range("M4:O7").Select
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add(Range("O5:O7"), _
        xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(255, 0 _
        , 0)
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add(Range("O5:O7"), _
        xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(255, _
        192, 0)
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add(Range("O5:O7"), _
        xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(192, 0 _
        , 0)
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("M4:O7")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("M4").Select
End Sub

2 个答案:

答案 0 :(得分:2)

未经测试,但类似这样:

Sub Test1()
    DoSort ThisWorkbook.Sheets("Sheet1")
End Sub

Sub Test2()
    DoSort ThisWorkbook.Sheets("Sheet2")
End Sub

Sub DoSort(sht As Worksheet)
    With sht.Sort

        .SortFields.Clear
        .SortFields.Add(sht.Range("O5:O7"), xlSortOnCellColor, xlAscending, _
            , xlSortNormal).SortOnValue.Color = RGB(255, 0, 0)
        .SortFields.Add(sht.Range("O5:O7"), xlSortOnCellColor, xlAscending, _
            , xlSortNormal).SortOnValue.Color = RGB(255, 192, 0)
        .SortFields.Add(sht.Range("O5:O7"), xlSortOnCellColor, xlAscending, _
            , xlSortNormal).SortOnValue.Color = RGB(192, 0, 0)

        .SetRange sht.Range("M4:O7")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply

    End With

    sht.Range("M4").Select

End Sub

如果您只希望按钮对活动表进行排序,则只需在现有代码中使用ActiveSheet

答案 1 :(得分:-1)

您可以将活动工作表与

一起使用
ActiveWorkbook.ActiveSheet

代替

ActiveWorkbook.Worksheets("Sheet1")

如果替换具体的工作表名称并将脚本应用于按钮,它将考虑相应的工作表。