好的,所以我是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`
答案 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