VBA整理单元格颜色,具有不同的范围和表格

时间:2015-02-22 04:14:56

标签: excel vba sorting

我目前正在学习/搞乱VBA编码,所以我可以写一些宏来工作。我可以真的使用一些帮助。

问题:我希望下面的代码(由宏记录器编写)为我的需要添加一些特定的代码。

Sub Sort()

Range("A1:D23").Select
ActiveWindow.SmallScroll Down:=-15
ActiveWorkbook.Worksheets("Sheet8").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet8").Sort.SortFields.Add(Range("A2:A23"), _
    xlSortOnCellColor, xlDescending, , xlSortNormal).SortOnValue.Color = RGB(255, _
    255, 0)
With ActiveWorkbook.Worksheets("Sheet8").Sort
    .SetRange Range("A1:D23")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply

End Sub

  1. 第一行我希望它不具有特定范围的静态。替换Range(“A1:D23”)。选择范围(“A1”)。CurrentRegion。选择我的数据表中不同范围的工作?

  2. 对于第3,第4和第5行,其中显示ActiveWorkbook.Worksheets(“Sheet8”)如何才能使其不仅对于sheet8而且对于我打开或创建的任何工作表都有效?

  3. 3.最后在第4行Sort.SortFields.Add(范围(“A2:A23”),我想从不同的数据更改为该列下的不同行数

    我希望我足够清楚。如果可以,请帮助

1 个答案:

答案 0 :(得分:1)

这可能会有所帮助:

  1. 获取工作表的行数并使用它。请参阅下面的详细信息。注意:如果工作表是空的,可能会出现故障。

  2. ActiveWorkbook.Sheets("Sheet 8")替换为ActiveSheet。不幸的是,ActiveSheet不提供自动完成功能,但它是一个Sheet对象。将它投射到任何Sheet对象都会给你这种行为。

  3. 好吧,一旦你希望你的代码两次处理相同的范围,你也可以将它保存在一个变量中。

  4. 考虑到您的表可能会按行和列扩展,您需要使用End命令对它们进行计数。

    这是更新后的代码:

    Sub Sort()
        Dim sht As Worksheet
        Dim rngSort As Range
        Dim rngTable As Range
        Set sht = ActiveSheet        
    
        rowCount = sht.Range("A1").End(xlDown).Row
        Set rngSort = sht.Range("A1:A" & rowCount)
        Set rngTable = sht.Range(sht.Cells(1, 1), sht.Cells(rowCount, 1).End(xlToRight))
    
        sht.Sort.SortFields.Clear
        sht.Sort.SortFields.Add(rngSort, _
            xlSortOnCellColor, xlDescending, , _
            xlSortNormal).SortOnValue.Color = RGB(255, 255, 0)
    
        With sht.Sort
            .SetRange rngTable
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End Sub
    

    看看我的射程。我使用sht.Range因为当您没有说出您的范围在哪里时,Excel会认为它是您选择的工作表。如果不是,你必须明确说出来。在你的情况下,没关系。