我记录了一个excel vba排序,但没有';我不懂代码行

我记录了一个excel vba排序,但没有';我不懂代码行,excel,vba,Excel,Vba,我是VBA新手,因此我经常在excel中记录任何内容并使用记录的代码。不幸的是,我不理解下面的排序代码 Private Sub SortType() ActiveWorkbook.Worksheets("Requirements").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Requirements").Sort.SortFields.Add Key:=Range( _ "C6:C" & usedRo

我是VBA新手,因此我经常在excel中记录任何内容并使用记录的代码。不幸的是,我不理解下面的排序代码

Private Sub SortType()
    ActiveWorkbook.Worksheets("Requirements").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Requirements").Sort.SortFields.Add Key:=Range( _
        "C6:C" & usedRows), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Requirements").Sort
        .SetRange Range("B6:T" & usedRows)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
第一行
对.SortFields.Clear进行排序是什么(我真的需要它吗?)以及我需要With方法做什么

谢谢你的帮助!:)

第一行Sort.SortFields.Clear是什么

从中,SortField对象包含工作表、ListObject和自动筛选对象的所有排序信息

因此,它将删除任何现有的
自动筛选

我需要这个方法做什么

它会整理代码(否则您的行会更长,例如
ActiveWorkbook.Worksheets(“Requirements”).Sort.SetRange Range(“B6:T”&usedRows)
,但使用宏记录器时,通常会在
中包含冗余代码

例如,您可以按如下方式精简代码:

重现


第一行清除任何现有的排序信息(请注意,它实际上不会对任何内容进行排序)。With块只保存写入
ActiveWorkbook.Worksheets(“要求”)。对该块内每一行上的
部分进行排序。没有它,代码必须是:

Private Sub SortType()
    ActiveWorkbook.Worksheets("Requirements").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Requirements").Sort.SortFields.Add Key:=Range( _
        "C6:C" & usedRows), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal

    ActiveWorkbook.Worksheets("Requirements").Sort.SetRange Range("B6:T" & usedRows)
    ActiveWorkbook.Worksheets("Requirements").Sort.Header = xlGuess
    ActiveWorkbook.Worksheets("Requirements").Sort.MatchCase = False
    ActiveWorkbook.Worksheets("Requirements").Sort.Orientation = xlTopToBottom
    ActiveWorkbook.Worksheets("Requirements").Sort.SortMethod = xlPinYin
    ActiveWorkbook.Worksheets("Requirements").Sort.Apply
End Sub

SortFields
是一组值,这些值描述排序范围中的哪些列被排序以及排序方式,因此在执行新排序之前删除这些数据是有意义的


With..End With
是一种语法速记,它只需重复键入开头
With
语句后面的对象名即可。

你的链接真的是要返回到这篇文章吗?只是wondrin,还是你不小心粘贴了错误的链接?
Private Sub SortType()
    ActiveWorkbook.Worksheets("Requirements").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Requirements").Sort.SortFields.Add Key:=Range( _
        "C6:C" & usedRows), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal

    ActiveWorkbook.Worksheets("Requirements").Sort.SetRange Range("B6:T" & usedRows)
    ActiveWorkbook.Worksheets("Requirements").Sort.Header = xlGuess
    ActiveWorkbook.Worksheets("Requirements").Sort.MatchCase = False
    ActiveWorkbook.Worksheets("Requirements").Sort.Orientation = xlTopToBottom
    ActiveWorkbook.Worksheets("Requirements").Sort.SortMethod = xlPinYin
    ActiveWorkbook.Worksheets("Requirements").Sort.Apply
End Sub