【问题标题】:Using Sort in VBA for a Range that Changes在 VBA 中对更改的范围使用排序
【发布时间】:2014-04-06 03:53:59
【问题描述】:

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

我遇到的问题是它只能是这个特定的单元格范围。在此范围下还有其他我不想排序的单元格,并且此范围的大小会发生变化。部分代码如下。这是我到目前为止没有运气的尝试。

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

这不起作用。

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

有人可以帮我解决这个问题吗?提前非常感谢您!

【问题讨论】:

  • 我知道如何找到我需要排序的内容,甚至选择它 当前代码中的哪些行是这样做的? (我猜是前两行)然后这个选择会是当前在您的.Sort 中硬编码的“B11:H14”吗?
  • @DavidZemens 是的,代码中的前两行就是这样做的。范围 B11 到 H14 是在我复制的特定代码中选择的范围,但是每次运行代码时都会更改。

标签: excel function vba sorting range


【解决方案1】:

如果我理解正确,这将有所帮助。它找出所选区域的行号,然后用这些数字在 F 列中创建一个范围,并将其用作排序的键。

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

【讨论】:

  • 您的代码运行良好,稍作修改。我没有使用 actSheet 变量,而是使用了 ActiveWorkbook.Worksheets("(Name of Sheet)")。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2015-06-03
  • 1970-01-01
  • 2021-08-25
  • 2018-05-13
  • 1970-01-01
  • 1970-01-01
  • 2018-03-29
  • 1970-01-01
相关资源
最近更新 更多