【问题标题】:Sort By Column A Not Working Excel VBA按列A排序不工作的Excel VBA
【发布时间】:2017-07-29 01:02:41
【问题描述】:

我正在尝试按 A2-A30000 范围内的 A 列排序,并且我想在 A 列第 1 行上进行下拉,但它既没有排序也没有启用 A 列第 1 行的下拉菜单。即使没有 VBA,当我只需选择 A1 并按过滤器,它就会自动将下拉列表放在 A2 上。发生的另一个问题是它仅对 A 列进行排序,但只是将 A 列移动,而将其他列单独留下,从而使整个工作表出错。

ActiveWorkbook.Worksheets("Sheet3").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet3").Sort.SortFields.Add Key:=Range("A2"), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
    .SetRange Range("A2:A30000")
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

知道可能出了什么问题吗?

【问题讨论】:

  • 您需要选择工作表中的所有列以对它们进行过滤和排序
  • 对于排序,您需要将SetRange 设置为整个表格的范围。对于过滤器,我建议您查看Worksheets.AutoFilter 方法。

标签: vba excel sorting


【解决方案1】:
ActiveWorkbook.Worksheets("Sheet3").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet3").Sort.SortFields.Add Key:=Range("A2"), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet3").Sort
    .SetRange Range("A2:BZ30000")
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

感谢评论

【讨论】:

    【解决方案2】:

    您仅引用 A 列;使用 .CurrentRegion 属性来隔离辐射到第一个完全空白行和完全空白列的数据“孤岛”。我怀疑你在 A1 中有一个文本列标签。

    With ActiveWorkbook.Worksheets("Sheet3")
        With .Cells(1, "A").CurrentRegion
            .Cells.Sort Key1:=.Columns(1), Order1:=xlAscending, _
                        Orientation:=xlTopToBottom, Header:=xlYes
        End With
    End With
    

    记录的代码在某些情况下可以正常工作,但 VBA 功能可以更有效地处理排序。

    你真的应该知道你是否有标题;永远不要使用 xlGuess。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      • 2014-02-22
      • 2014-08-07
      • 1970-01-01
      • 2016-03-30
      • 2013-07-12
      相关资源
      最近更新 更多