我记录了一个excel vba排序,但不了解代码行

时间:2014-07-23 09:28:28

标签: excel excel-vba vba

我是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

第一行Sort.SortFields.Clear(我真的需要它吗?)以及我需要使用With方法的是什么?

感谢您的帮助! :)

3 个答案:

答案 0 :(得分:2)

  

Sort.SortFields.Clear第一行是什么

From here SortField对象包含Worksheet,ListObject和AutoFilter对象的所有排序信息

因此它删除了现有的AutoFiltering

  

为什么我需要With-method?

它整理了代码(即你的行会更长,例如ActiveWorkbook.Worksheets("Requirements").Sort.SetRange Range("B6:T" & usedRows),但是当使用宏录制器时,With

中通常包含冗余代码

举个例子,你可以像这样修剪你的代码:

重切

Sub BottomUp()
Dim ws As Worksheet
Dim rng1 As Range
Set ws = Worksheets("Requirements")
ws.Sort.SortFields.Clear
Set rng1 = ws.Range(ws.[B6], ws.Cells(Rows.Count, "T").End(xlUp))
rng1.Sort ws.[c6], xlAscending
End Sub

答案 1 :(得分:2)

第一行清除所有现有的排序信息(注意它实际上没有排序任何东西)。 With块只是简单地保存在该块内的每一行上写ActiveWorkbook.Worksheets("Requirements").Sort部分。没有它,代码必须是:

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

答案 2 :(得分:1)

SortFields是一组值,用于描述排序范围中的哪些列的排序方式,因此在执行新排序之前删除任何此类数据是有意义的。

With .. End With是一种语法简写,它只是在重复输入开头With语句后面的对象名称时保存。