首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在VBA中对更改的范围使用排序

在VBA中对更改的范围使用排序
EN

Stack Overflow用户
提问于 2014-03-04 14:37:37
回答 1查看 7.4K关注 0票数 2

我在VBA中有一系列单元格,每次运行代码时都会更改。我正在尝试编写代码,以便按照F列对此范围进行排序。

我的问题是,它只能是这个特定范围的细胞。在这个范围下面还有一些我不想排序的单元格,并且这个范围会改变大小。代码的一部分如下。到目前为止,我一直在无缘无故地尝试着这样做。

代码语言:javascript
复制
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select

vtools = Selection

ActiveWorkbook.Worksheets("Exceptions Weekly Summary").Sort.SortFields.Add Key _
    :=Range(vtools), SortOn:=xlSortOnValues, Order:=xlAscending, _
    DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Exceptions Weekly Summary").Sort
    .SetRange Range("B11:H14")
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

这不管用。

我不能直接引用单元格(例如,我不能使用范围(“F2:F5”)),因为每次运行代码时,这些单元格都位于不同的位置。我知道如何找到我需要排序的内容,甚至选择它,但是我很难告诉排序函数要按哪一列排序。

有人能帮我吗?提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-04 16:45:09

如果我理解得对,这会有帮助的。它找出所选区域的行号,然后用这些数字在F列中确定一个范围,并使用它作为排序的键。

代码语言:javascript
复制
Sub sortOnlySelectedArea()

Dim actSheet As Worksheet
Dim upper, lower As Integer
Dim tempString As String
Dim selectedArea As Range

Set actSheet = Application.Worksheets("Sheet1")

' here you have to put in your part to make the right selection
actSheet.Range("E5:G6").Select
Set selectedArea = Selection

upper = selectedArea.Row
lower = upper + selectedArea.Rows.Count - 1

tempString = "F" & CStr(upper) & ":F" & CStr(lower)
actSheet.Sort.SortFields.Clear
actSheet.Sort.SortFields.Add Key:=Range(tempString), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With actSheet.Sort
    .SetRange selectedArea
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

End Sub
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22174908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档