排序对话框锁定数据标题VBA

时间:2018-07-17 12:38:09

标签: vba excel-vba dialog

全部

我正在使用一些代码通过VBA弹出排序对话框。我的数据集将始终具有标题,并且我想锁定“我的数据在排序对话框的角处具有标题按钮”

我已插入行

`ActiveSheet.Sort.Header = xlYes`

但是,这似乎并不像我期望的那样起作用。我希望获得的结果在下面的屏幕截图中;

enter image description here

下面的完整代码;

Sub ShowSortDialogBRR()

 Application.ScreenUpdating = False
 Application.Calculation = xlManual
 ActiveSheet.Unprotect Password:="fsp123"
 Application.EnableEvents = False

 'select range and show sort dialog box

 Dim Lastrow As Long
 Lastrow = ActiveSheet.Range("LastRow_BRR").Offset(rowOffset:=-1).Row
 Brr.Range("B3:CE" & Lastrow).Select

 On Error Resume Next
 ActiveSheet.Sort.Header = xlYes
 Application.Dialogs(xlDialogSort).Show
 If Err.Number = 1004 Then
    MsgBox "Place the cursor in the area to be sorted"
 End If
 Err.Clear


 With ActiveSheet
.Protect Password:="fsp123", UserInterfaceOnly:=True, DrawingObjects:=False, Contents:=True, AllowFiltering:=True, AllowFormattingColumns:=True
.EnableOutlining = True
End With

Application.ScreenUpdating = True
Application.Calculation = xlAutomatic
Application.EnableEvents = True

End Sub

任何解决此问题的帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

当范围应用了过滤器时,该选项显示为灰色。您不必实际过滤数据,只需显示过滤器下拉列表即可。这是一个示例,如果尚未启用钳工,则将其打开。

Sub SortData()

    Dim r As Range
    Dim HasFilter As Boolean

    Set r = Sheet1.Range("A1:B4")

    HasFilter = Sheet1.AutoFilterMode

    If Not HasFilter Then
        r.AutoFilter
    End If

    Application.Dialogs(xlDialogSort).Show

    If Not HasFilter Then
        r.AutoFilter
    End If

End Sub