1

我是 VBA 新手,擅长宏,但不是基本编程。我有几十个 excel 文件,我从中获取数据、清理它们并将其填充到一个文件中。数据填充好后,我想按照A列进行排序。玩了2个小时后,我刚刚录制了一个宏并将其剪切并粘贴到我的ButtonCall sub中。但我想知道它为什么起作用以及为什么我在这里找到的解决方案和在线对我不起作用......

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

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

有什么想法吗?谢谢。

4

1 回答 1

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
于 2013-11-08T17:52:20.243 回答