0

通过我的问题,您可以得出结论,我是 VBA 的新手。我记录了一些宏,它们基本上选择了一些行,然后以各种方式对这些数据进行排序。一个这样的宏如下所示。它选择第 17 到 203 行,然后按“AJ”列升序排序。

问题是我不希望我的选择的最后一行,第 203 行,是一个常数。我希望它是一个变量。在我的电子表格中,我在单元格 Z10 中有一个变量,我想将其用作分配给排序选择的最后一行的数字。例如,如果 Z10 的值为 100,那么我希望我的宏选择第 17 行到第 100 行并执行排序。如果我在单元格 Z10 中输入值 203,那么我希望宏根据选择行 17 到 203 进行排序,依此类推。

谢谢帕特

' Ticker Macro
'
' Keyboard Shortcut: Ctrl+t
'
    Rows("17:203").Select
    Range("A203").Activate
    ActiveWorkbook.Worksheets("Invest daily").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Invest daily").Sort.SortFields.Add Key:=Range( _
        "AJ17:AJ203"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Invest daily").Sort
        .SetRange Range("A17:DB203")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
       .SortMethod = xlPinYin
        .Apply
    End With
   Range("AJ17").Select
End Sub
4

2 回答 2

0

您需要获取 Z10 单元格中的值并将此值分配给一个变量,然后使用此变量而不是您的常量:

' Ticker Macro
'
' Keyboard Shortcut: Ctrl+t
'
    Dim MaxRow As String
    MaxRow = Cells(10,26).Value
    Rows("17:" & MaxRow).Select
    Range("A" & MaxRow).Activate
    ActiveWorkbook.Worksheets("Invest daily").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Invest daily").Sort.SortFields.Add Key:=Range( _
        "AJ17:AJ" & MaxRow), SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Invest daily").Sort
        .SetRange Range("A17:DB" & MaxRow)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
       .SortMethod = xlPinYin
        .Apply
    End With
   Range("AJ17").Select
End Sub
于 2013-10-15T14:01:49.020 回答
0

我相信这就是您正在寻找的:

Dim nLastRowIndex As Long, nColIndex As Long

nLastRowIndex = 203 'TODO determine last row index
nColIndex = 17

'Instead of Rows("17:203").Select, you'll do:    
Rows(CStr(nColIndex) & ":" & CStr(nLastRowIndex)).Select
...

VBA 中的Dim语句声明了一个变量(此处为nLastRowIndexnColIndex),然后您可以为它们赋值(分别为 203 和 17)。稍后,您可以通过将变量的数值转换为字符串,然后将它们连接到单元格索引中来使用这些值来形成单元格索引"17:203"

如果您想使用另一个包含最后一行编号的单元格(就像Z10在您的问题中一样),您需要做的就是(未经测试的代码,您可能需要稍微调整一下,但它很接近):

nLastRowIndex = CLng(Cells("Z10").Value)

此代码读取 cell 的值Z10,将其转换为Long(32 位整数值),然后将值分配给nLastRowIndex

于 2013-10-15T13:52:17.410 回答