我有数据需要对多列进行排序,然后按0/1进行过滤,我只想使用任何工作表并找到我已完成的列地址:
Dim ColName1 As Variant
Set ColName1 = sht.Cells.Find("name of column").Address
我可以将它用于sort命令的一部分,但是我试图设置另一个Varient或String = Left(sht.Cells.Find("列名")。 ,2)从$ K $ 1中删除$ 1但是当输入到sort命令时,它并不喜欢它。我是否需要使用其他类型来定义ColName1?或者将第二项定义为int / something?
ActiveWorkbook.Worksheets("test").sort.SortFields.Add Key:=Range(ColName1.Address & ":K" & LastRow) _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 'categ / material
With ActiveWorkbook.Worksheets("test").sort
.SetRange Range(UsedRange)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
我有多列要排序,所以我想把它变成动态并最终把它扔进一个接口,我只是在文件中读取并使用用户定义的变量/对象来定义要排序的列。
另外,我读了很多关于不引用当前的ActiveWorkbook.Worksheets,但是当我尝试定义像
这样的东西时Set sht = ActiveSheet
它只适用于某些事情,但不适用于sht.sort?我错过了什么......
答案 0 :(得分:0)
在VBA中排序过于痛苦。以下是我将如何做到这一点:
Sub TestSort()
Dim Sht As Worksheet
Dim SortCol As Long
Dim LastRow As Long
Dim LastCol As Long
Set Sht = ActiveSheet
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
LastCol = Cells(1, Columns.Count).End(xlToLeft).Column
SortCol = Sht.Cells.Find("Name of Column").Column
Sht.Sort.SortFields.Clear
Sht.Sort.SortFields.Add Key:=Range(Cells(2, SortCol), Cells(LastRow, SortCol))
With Sht.Sort
.SetRange Range(Cells(1, 1), Cells(LastRow, LastCol))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub