Excel自动排序

时间:2017-04-15 14:11:27

标签: excel excel-vba sorting vba

好的,所以我是VBA的新手(动作没有问题 - 所以不是新编码,只是VBA)并且一直在努力学习我能做什么并获得一些代码为我工作。我在Excel中有一份报告。第6行是标题,第7行是空白,8是附加信息;实际数据从第9行(B9:D9)向下开始。 Colum C包含我想要排序的数据。随着新数据在后续行中输入,我希望报告在我完成D#中的数据输入后自动重新排序。 (希望这很有意义)

这可能在VBA中吗?或者我问得太多了?

非常感谢。

以下是我一直在使用的内容:

`Private Sub Worksheet_Change(ByVal Target As Range)
Dim CCell As Range
Dim ActiveCellInTable As Boolean
Dim r As Single
Dim Value As Variant
Rows("9:38", "B:E").Select
Set CCell = Target
On Error Resume Next
ActiveCellInTable = (CCell.ListObject.Name = "Table2")
On Error GoTo 0
If ActiveCellInTable = True Then
    r = Target.Row - Target.ListObject.Range.Row + 9
    For c = 1 To ActiveSheet.ListObjects(CCell.ListObject.Name).Range.Columns.Count
        If ActiveSheet.ListObjects(CCell.ListObject.Name).Range.Cells(r, c).Value = "" Then Exit Sub
    Next c
    With ActiveSheet.ListObjects(CCell.ListObject.Name).Sort
        .SortFields.Clear
        .SortFields.Add _
            Key:=Range("Table2[[#All],[Item number]]"), SortOn:=xlSortOnValues, Order _
            :=xlAscending, DataOption:=xlSortNormal
        .Apply
    End With
End If
End Sub`

1 个答案:

答案 0 :(得分:0)

是的,这是可能的,这是我正在尝试做的事情的版本。 ' Worksheet_Change'必须进入Sheet1代码,并在每次工作表中的任何单元格更改时执行。为了安全起见,您应该禁用事件,否则代码可能会因不同的电子表格事件而过早中断:

Private Sub Worksheet_Change(ByVal Target As Range)
   Dim lastRow As Integer
   Dim entireRange As Range, sortRange As Range

   Application.EnableEvents = False

   lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "B").End(xlUp).row
   If Not Intersect(Target, Me.Range("D9:D" & lastRow)) Is Nothing Then
     Set entireRange = Range("B9:D" & lastRow)
     Set sortRange = Range("C9:C" & lastRow)

     entireRange.Sort Key1:=sortRange, Order1:=xlAscending, Header:=xlNo
   End If

   Application.EnableEvents = True
End Sub