EXCEL VBA在填充数据后排序

时间:2013-11-08 10:44:13

标签: excel vba sorting excel-vba

我是VBA的新手,并且擅长宏,但不是基本的编程。我有几十个excel文件,我从中获取数据,清理它,并将其填充到一个文件中。填充数据后,我想根据A列对其进行排序。经过2个小时的播放后,我只记录了一个宏并将其剪切并粘贴到我的ButtonCall子中。但我想知道为什么它的工作以及为什么我在这里找到的解决方案,以及在线对我不起作用......

为什么这个简单的代码不起作用:

Set q = ThisWorkbook.Worksheets(2) 
LastRow = q.UsedRange.rows.Count 'q.UsedRange.Row '  - 1 + q.UsedRange.rows.Count 
LastCol = q.UsedRange.Columns.Count 
q.Range("A6:AAA" & LastRow).Sort Key:=q.Columns("A"), Order:=xlDescending

虽然这个修改过的录制宏有吗?

Set q = ThisWorkbook.Worksheets(2)
LastRow = q.UsedRange.rows.Count 'q.UsedRange.Row '  - 1 + q.UsedRange.rows.Count
LastCol = q.UsedRange.Columns.Count
q.Sort.SortFields.Clear
q.Sort.SortFields.Add Key:=Range("A6:A" & LastRow), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With q.Sort
    .SetRange Range("A6:AAA" & LastRow)
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

有什么想法?感谢。

1 个答案:

答案 0 :(得分:1)

您的代码使用的是range.sort 方法,而原始代码使用了排序对象 - 两种不同的东西。

此代码将使用Range.Sort方法按列A将“A6”排序为数据结尾。

Sub MySort()
Dim q As Worksheet
Dim r As Range
Set q = ThisWorkbook.Worksheets(2)
'   specify data range from "A6" to end of data
    Set r = q.Range("A6", q.Cells.SpecialCells(xlCellTypeLastCell))
'   Header:=xlNo assumes A6 row is included in data to be sorted
    r.Sort key1:=r(1, 1), Order1:=xlDescending, Header:=xlNo
End Sub