【发布时间】:2021-09-03 21:22:44
【问题描述】:
除了应用于特定范围之外,我有以下代码可以执行我想要的操作。换句话说,它确实对多列进行排序,并在数据更改时自动更新:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("D3:F")) Is Nothing Then
Columns("A:Z").Sort Key1:=Range("F3"), Key2:=Range("E3"), Key3:=Range("D3"), _
Order1:=xlAscending, Order2:=xlAscending, Order3:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
End If
End Sub
但是,它的作用是将其应用于“A:Z”的整个范围,而我希望它仅应用于特定范围(例如“A3:Z”)。
我对 Excel VBA 的了解非常有限,并且做了我认为的解决方案,将 Columns("A:Z").Sort 更改为 Columns("A3:Z").Sort 和 Range("A3:Z").Sort,但在此更改后代码停止工作。
任何帮助将不胜感激!
【问题讨论】:
-
"A3:Z" 在 VBA 中没有任何意义。事实上,你想做什么?是否要使用从 A3 到 Z:Z 列的最后一个单元格的范围?工作表中的所有列的行数是否相同?
-
是的,尝试使用您所描述的内容。是的,它们都有相同的行数。
-
那么,请尝试我在回答中推荐的解决方案。