0

因为我是编写宏的新手。我需要帮助编写一个宏,该宏对单元格值“TLA”之间的一系列行进行排序。这是一个例子:

Column A   
  TLA  
   23
    6
   32
  TLA
  TLA
    5
   21
   16
   40
  TLA

我尝试修改从该论坛浏览的宏。但是,我无法选择行。任何指示或帮助都会对我有很大帮助。VB:

Sub Sort_column_TLA() 

    Dim r As Long 
    Application.ScreenUpdating = False 
    ActiveSheet.DisplayPageBreaks = False 
    r =Range("A"& ActiveSheet.Rows.Count).End(xlUp).Row 
    For r = r To 2 Step -1 

        Select Case Cells(r, 1) 
        Case "TLA" 
             'do nothing
        Case Else 
            Range(r & ":" & r ).Select 

             'Rows(r).Select
        End Select 
    Next r 
End Sub 
4

2 回答 2

0

除了您实际上没有对值进行排序外,我认为您的代码没有任何问题。
就选择而言,如果您调试代码并逐步运行,您将看到该行确实被选中。

以下将对“TLA”之间的所有值进行升序排序

Function a()
    Dim r, r2 As Long

    r2 = 0

    Application.ScreenUpdating = False
    ActiveSheet.DisplayPageBreaks = False
    r = Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row
    For r = r To 1 Step -1

        If (Cells(r, 1) = "TLA") Then
            If (r2 <> 0) Then
                If (r2 - r >= 2) Then
                    With Range(r + 1 & ":" & r2)
                        .Sort Key1:=Range("A" & r + 1), _
                                Order1:=xlAscending, _
                                Orientation:=xlTopToBottom
                    End With
                End If
            End If
        r2 = r - 1
        End If

    Next r
End Function
于 2012-06-27T11:10:48.917 回答
0

你的构造看起来很奇怪:

r =Range("A"& ActiveSheet.Rows.Count).End(xlUp).Row  
For r = r To 2 Step -1 

我认为如果你让计数器从上到下运行会更透明(具体原因是相反?)使用另一个计数器,例如。lCnt(只要)。希望对你有所帮助。

例如,使用不同的方式设置范围

set oRange = thisworkbook.sheets("<Name>").usedrange    'Declare oRange as excel.range
for each oRow in oRange.rows   
    lCnt = lCnt + 1
    select case oRow.cells(lcnt, 1)
        case "TLA" 
        oRow.select 
        'etc... 
    end select
next oRange 
于 2012-06-27T10:53:55.460 回答