我是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方法的是什么?
感谢您的帮助! :)
答案 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
语句后面的对象名称时保存。