【问题标题】:VBA sorting cell color with varying ranges and sheetsVBA 对具有不同范围和工作表的单元格颜色进行排序
【发布时间】:2015-04-23 15:17:10
【问题描述】:

我目前正在学习/处理 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").Select 替换为Range("A1").CurrentRegion.Select 是否适用于我的数据表中的不同范围?

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

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

【问题讨论】:

    标签: excel vba sorting


    【解决方案1】:

    这可能会有所帮助:

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

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

    3. 好吧,一旦你想让你的代码两次处理相同的范围,你不妨把它保存在一个变量中。

    考虑到您的表格可能会扩展为行和列,您需要使用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 会假定它是您选择的工作表。如果不是,您必须明确说明。在你的情况下,没关系。

    【讨论】:

    • 非常感谢您的帮助。一个问题 Set rng = sht.Range(Cells(1, 1), Range(Cells(1, 1)).End(xlDown) 返回预期的编译错误:list error or )
    • 抱歉,我目前没有安装 Excel 来调试它。将答案更改为更简单的方法。
    • 感谢您的耐心等待,我真的是新手。
    • 没问题。 :) 更新了我的答案。它奏效了吗?编辑:刚刚注意到您的表包含不止一列。我的代码需要再次更新。
    • 是的,我的练习表有 4 列,但这会随着我在工作中使用的电子表格而改变。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多