获取VBA Dialogs(xlDialogSort)的选项

时间:2015-10-28 16:00:58

标签: excel vba excel-vba excel-2010

我需要在几张纸上实现相同的排序。此外,我希望用户使用标准的排序对话窗口手动设置排序规则。

所以,我想创建一个启动Dialogs(xlDialogSort)窗口的程序,在用户指定了排序参数并单击OK之后,程序将“读取”这些参数并通过宏将它们应用到多个工作表(标准排序)码)。

目前我的代码如下所示:

Public Sub sortMultipleSheets()
    Dim sortDiagAnswer As Boolean

    sortDiagAnswer = Application.Dialogs(xlDialogSort).Show

    If Err.Number = 1004 Then
        MsgBox "Place the cursor in the area to be sorted"
        Exit Sub
    End If
    Err.Clear

    If sortDiagAnswer Then
        'read user defined parameters
        '...

        actualSort (wsh1)
        actualSort (wsh2)
    End If

End Sub

Private Sub actualSort(ByVal wsh As Worksheet)
    With wsh.Sort
        With .SortFields
            .Clear
            .Add Key:= 'user-defined key1
            .Add Key:= 'user-defined key2
            .Add Key:= 'user-defined key3
            'any more user-defined keys
        End With
        .SetRange Range('actual range)
        .Header = 'setting from the sorting dialog window
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

我错过了在按下OK按钮时获取用户定义参数的部分。 有什么想法吗?

1 个答案:

答案 0 :(得分:2)

据我所知,您无法从对话框中获取参数。您可以使用Show方法发送参数,但它们必须是ByVal,因为它们不会更改。排序和查找(可能还有其他一些)参数从一个调用到另一个调用持续存在。这意味着下次您对相同范围进行排序时,对话框将记住您上次执行的操作。从代码的角度来看,这通常是危险的,但你可以在这里利用它。

Dim srt As Sort

If Application.Dialogs(xlDialogSort).Show Then
    Set srt = ActiveSheet.Sort
    Debug.Print srt.SortFields(1).Key.Address
End If

无论用户为第一个排序字段的键选择什么,都将打印到立即窗口。您可以在对话框关闭后立即获取Sort对象的任何属性,以查看所选内容。显然,将整张图片放在一起比上面的代码更复杂。