Excel 2010工作表_Deactivate()自动排序
我是一个VBA noob。每当我离开一个页面时,我都会尝试让它自动排序。对于不同的列,该页面有六个手动排序,但在另一个页面上进行查找时,需要按第一列进行alpha排序。因此,当用户手动按另一个字段排序时,我希望它在离开页面时返回到所需的列排序。我试过找到的六种不同的宏,并对它们进行了一些编辑,但它们似乎都没有任何作用。以下是我的最新尝试:Excel 2010工作表_Deactivate()自动排序,excel,vba,sorting,Excel,Vba,Sorting,我是一个VBA noob。每当我离开一个页面时,我都会尝试让它自动排序。对于不同的列,该页面有六个手动排序,但在另一个页面上进行查找时,需要按第一列进行alpha排序。因此,当用户手动按另一个字段排序时,我希望它在离开页面时返回到所需的列排序。我试过找到的六种不同的宏,并对它们进行了一些编辑,但它们似乎都没有任何作用。以下是我的最新尝试: Private Sub Worksheet_Deactivate() With Me.Range("B6:K604").CurrentRegion
Private Sub Worksheet_Deactivate()
With Me.Range("B6:K604").CurrentRegion
.Sort Key1:=Range("B6:B604"), Order1:=xlAscending, _
Header:=xlNo, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
End With
End Sub
在另一个事件中:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheets("Sheet1").Activate
With Sheets("Sheet1").Range("B2:C9").CurrentRegion
.Sort Key1:=Range("B6:B604"), Order1:=xlAscending, _
Header:=xlNo, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
End With
End Sub
激活工作表,排序并保存…尝试以下操作:
Private Sub Worksheet_Deactivate()
Dim sortkey As Range, sortrng As Range
With me
Set sortkey = .Range("B6:B604")
Set sortrng = .Range("B6:K604")
End With
me.Sort.SortFields.Clear
me.Sort.SortFields.Add Key:=sortkey, SortOn:=xlSortOnValues, _
Order:=xlDescending, DataOption:=xlSortNormal
With me.Sort
.SetRange sortrng
.Header = xlNo
.MatchCase = False
.Orientation = xlSortColumns
.SortMethod = xlPinYin
.Apply
End With
End Sub
好的,这是经过尝试和测试的关键是首先清除现有的过滤器。
每张工作表是否使用相同的范围和排序参数?尝试用实际的工作表引用替换我用工作表3和工作表(“飞机”)-没有更改。我确实做到了这一点:
code
Private Sub worker\u Deactivate()工作表(“飞机”).Sort.SortFields.Clear工作表(“飞机”).Sort.SortFields.Add键:=范围(“B5:B604”),排序:=xlSortOnValues,顺序:=xlAscending,数据选项:=xlSortNormal与工作表(“飞机”).Sort.SetRange范围(“B5:J604”).Header=xlNo.MatchCase=False.Orientation=xltoptobttom.SortMethod=xlPinYin.Apply End With SendKeys“{ESC}”End Subcode
但它会保留选中的范围并导致奇怪的视觉效果我将尝试一下,看看结果是否比我当前的代码更好。谢谢。这也很有效,但在新选择的页面上仍然会留下一个奇怪的框状背景。事实证明,我对上述代码所要做的就是在停用排序期间关闭屏幕更新,这样视觉损坏就会消失。非常感谢所有的帮助!