Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 2010工作表_Deactivate()自动排序_Excel_Vba_Sorting - Fatal编程技术网

Excel 2010工作表_Deactivate()自动排序

Excel 2010工作表_Deactivate()自动排序,excel,vba,sorting,Excel,Vba,Sorting,我是一个VBA noob。每当我离开一个页面时,我都会尝试让它自动排序。对于不同的列,该页面有六个手动排序,但在另一个页面上进行查找时,需要按第一列进行alpha排序。因此,当用户手动按另一个字段排序时,我希望它在离开页面时返回到所需的列排序。我试过找到的六种不同的宏,并对它们进行了一些编辑,但它们似乎都没有任何作用。以下是我的最新尝试: Private Sub Worksheet_Deactivate() With Me.Range("B6:K604").CurrentRegion

我是一个VBA noob。每当我离开一个页面时,我都会尝试让它自动排序。对于不同的列,该页面有六个手动排序,但在另一个页面上进行查找时,需要按第一列进行alpha排序。因此,当用户手动按另一个字段排序时,我希望它在离开页面时返回到所需的列排序。我试过找到的六种不同的宏,并对它们进行了一些编辑,但它们似乎都没有任何作用。以下是我的最新尝试:

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 Sub
code
但它会保留选中的范围并导致奇怪的视觉效果我将尝试一下,看看结果是否比我当前的代码更好。谢谢。这也很有效,但在新选择的页面上仍然会留下一个奇怪的框状背景。事实证明,我对上述代码所要做的就是在停用排序期间关闭屏幕更新,这样视觉损坏就会消失。非常感谢所有的帮助!