结合两个VBA任务

时间:2013-07-08 14:28:56

标签: excel vba excel-vba excel-2010

我正在尝试组合两个功能。我有一个VBA脚本,它通过一个设定的范围,并按字母顺序逐列对所有文本进行排序。

Sub SortIndividualRows()
' Sorts rows within a list from A-Z
' Run Clean all first to avoid sorting blanks
' Set maximum range to avoid sorting too many rows

    Dim rngFirstRow As Range
    Dim rng As Range
    Dim ws As Worksheet

    Application.ScreenUpdating = False
    Set ws = ActiveSheet
    Set rngFirstRow = ws.Range("A1:NS1")
    For Each rng In rngFirstRow
        With ws.Sort
            .SortFields.Clear
            .SortFields.Add Key:=rng, Order:=xlAscending
            'assuming there are no blank cells..
            .SetRange ws.Range(rng, rng.Range("A87").End(xlUp))
            .Header = xlYes
            .MatchCase = False
            .Apply
        End With
    Next rng
    Application.ScreenUpdating = True
End Sub

我想将它与脚本结合起来,然后按颜色对每列进行排序。当我手动排序并查看录制的代码时,我录制了一个宏。我试图找出如何将生成的代码与上述函数结合起来。

Sub sortColor()
'
' sortColor Macro
' Goes through a range of selected cells and sorts by color, setting green cells (matches) above those with no match (red text)
'

'
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add(Range("F4:F88"), _
        xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(198, _
        239, 206)
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("F3:F88")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

1 个答案:

答案 0 :(得分:0)

只是为了澄清,你想要之后立即运行一个模块然后另一个模块?或者您希望每次for循环完成时第二个模块的操作都会运行吗?

直接在另一个之后运行一个:

Sub SortIndividualRows() '从A-Z对列表中的行进行排序 '首先运行清洁以避免排序空白 '设置最大范围以避免排序太多行

Dim rngFirstRow As Range
Dim rng As Range
Dim ws As Worksheet

Application.ScreenUpdating = False
Set ws = ActiveSheet
Set rngFirstRow = ws.Range("A1:NS1")
For Each rng In rngFirstRow
    With ws.Sort
        .SortFields.Clear
        .SortFields.Add Key:=rng, Order:=xlAscending
        'assuming there are no blank cells..
        .SetRange ws.Range(rng, rng.Range("A87").End(xlUp))
        .Header = xlYes
        .MatchCase = False
        .Apply
    End With
Next rng

ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add(Range("F4:F88"), _
    xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(198, _
    239, 206)
With ActiveWorkbook.Worksheets("Sheet1").Sort
    .SetRange Range("F3:F88")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
Application.ScreenUpdating = True
End Sub

每次for循环完成时运行第二个模块:

Sub SortIndividualRows()
' Sorts rows within a list from A-Z
' Run Clean all first to avoid sorting blanks
' Set maximum range to avoid sorting too many rows

Dim rngFirstRow As Range
Dim rng As Range
Dim ws As Worksheet

Application.ScreenUpdating = False
Set ws = ActiveSheet
Set rngFirstRow = ws.Range("A1:NS1")
For Each rng In rngFirstRow
    With ws.Sort
        .SortFields.Clear
        .SortFields.Add Key:=rng, Order:=xlAscending
        'assuming there are no blank cells..
        .SetRange ws.Range(rng, rng.Range("A87").End(xlUp))
        .Header = xlYes
        .MatchCase = False
        .Apply
    End With


ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add(Range("F4:F88"), _
    xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(198, _
    239, 206)
With ActiveWorkbook.Worksheets("Sheet1").Sort
    .SetRange Range("F3:F88")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

Next rng

Application.ScreenUpdating = True
End Sub