VBA中有没有办法使用它的标题名称对列进行排序?由于列可能会定期更改,我无法引用列号对其进行排序,我需要使用列标题进行排序。例如,我在C列中有订单状态(列标题),我需要对此订单状态进行排序,而不是将其称为 C列
这是我到目前为止的代码:
'Sort the "Order Status(Column C)"
'Clear out any previous Sorts that may be leftover
ws.Sort.SortFields.Clear
'range that includes all columns to sort
Set Rngsort = ws.UsedRange
'Columns with keys to sort
Set RngKey1 = ws.Range("C1")
'Perform the sort
With ws.Sort
Rngsort.Sort Key1:=RngKey1, Order1:=xlAscending, header:=xlYes, _
OrderCustom:=Application.CustomListCount + 1, MatchCase:=False, _
Orientation:=xlSortColumns, DataOption1:=xlSortNormal
End With
答案 0 :(得分:0)
编辑
你可以使用这个助手子:
Sub SortIt(rngToSort As Range, header As String)
With rngToSort ' reference passed range to sort
.Sort key1:=.Rows(1).Find(what:=header, LookIn:=xlValues, lookat:=xlWhole), _
order1:=xlAscending, header:=xlYes ' sort it by its column whose header is the passed one
End With
End Sub
您可以在当前代码中利用如下:
With ws ' reference your sheet
.Sort.SortFields.Clear 'Clear out any referenced sheet previous "Sorts" that may be leftover
SortIt .UsedRange, "status" 'Perform the sort on the referenced sheet used range
End With
答案 1 :(得分:0)
虽然window.addEventListener('scroll', function(e) {
if (document.body.scrollTop == 0) {
alert("top");
}
});
我怀疑效率更高,而且代码肯定更少,这很好,但我有兴趣使用.Find
进行游戏,所以写下以下内容,我欢迎提供反馈意见...
我基本上尝试匹配Application.Match
标题行中的headerToFind
字符串,如果没有找到则使用错误处理,否则排序。
usedRange
答案 2 :(得分:0)
这就是我的操作方式,基本上是先更改Header:=xlYes
然后更改key1:="HeaderName"
例如
ws.Range("A1:" & lColLet & lRow).Sort key1:="Area", order1:=xlAscending, Header:=xlYes