我是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
有什么想法?感谢。
答案 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