【发布时间】:2021-08-26 19:20:32
【问题描述】:
我发现了一些我认为可以帮助我通过 VBA 对工作表进行排序的文章(例如 VBA Excel sort range by specific column),但我就是无法让它们发挥作用。
当我进行排序时,我打开了许多工作表,我认为这可能会使问题复杂化。但是当我设置使用排序的范围时,我选择了工作表,所以我不知道。
如果您查看代码,您会发现我定义了许多可能有用的变量,因此请随意使用任何有用的变量。
'These are created elsewhere as Public, or passed into Sub
Dim SourceSheet As Worksheet
Dim MyWB As String
Dim MyWS As String
Dim ColNum As Integer
Dim SourceFirstRow As Integer
Dim SourceLastRow As Integer
Dim FinalFirstRow As Integer
Dim FinalFirstColumn As Integer
Dim FinalLastColumn As Integer
'These are created and used in the subroutine
Dim FinalSheet As Worksheet
Dim AllCells As Range
Dim SortColumn As Range
Dim SourceRow As Integer
Dim CurrentFinalRow As Integer
'These are actually set elsewhere and passed in, shown here for example
Set SourceSheet = ThisWorkbook.Worksheets(1)
Set SourceFirstRow = 2
Set SourceLastRow = 15
Set MyWB = "DataFile"
Set MyWS = "Data"
Set FinalFirstRow = 2
Set FinalFirstColumn = 1
Set FinalLastColumn = 20
Set ColNum = 4
'These is the relevant code from the subroutine
Set FinalSheet = Workbooks(MyWB).Worksheets(MyWS)
Set CurrentFinalRow = FinalFirstRow
Set AllCells = FinalSheet.Cells
Set SortColumn = FinalSheet.Columns(ColNum)
For SourceRow = SourceFirstRow To SourceLastRow
'Fill in a whole bunch of data into the rows and columns on the final sheet
'not all sourcerows are transferred
CurrentFinalRow = CurrentFinalRow + 1 'Sets it ready for the next blank line to be filled
Next SourceRow
Range(AllCells & CurrentFinalRow - 1).Sort key1:=Range(SortColumn & CurrentFinalRow - 1), order1:=xlAscending, Header:=xlYes
【问题讨论】:
-
Range(AllCells & CurrentFinalRow - 1)看起来有点不对劲。你想在这里做什么?如果您要传递行号,那么您需要在其前面有一个列字母。AllCells是Range。 -
我在链接到的帖子中使用了 Dmitry Pavliv 的代码。他使用 lastrow 以及一个范围,所以我认为你需要定义范围的“底部”。不是这样吗?
-
Range(AllCells).Sort key1:=Range(SortColumn), order1:=xlAscending, Header:=xlYes 也不起作用。 :(
-
了解如何使用
Range及其参数可能会很有用。 -
有很好的参考资料吗?我查看了 5 个关于 Range 的不同网站,但无法理解它们。