Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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
用VBA在Excel中对范围进行排序_Excel_Vba - Fatal编程技术网

用VBA在Excel中对范围进行排序

用VBA在Excel中对范围进行排序,excel,vba,Excel,Vba,我有几个类似的例子,它们都声称有效,但我的却没有。Excel 2013,Office 365 ' Sort the "URLs" worksheet after update Worksheets("URLs").Activate lngLastRow = Cells(65536, Range.Column).End(xlUp).Row Set Range = Worksheets("URLs").Range("A3:E" & lngLastRow) Worksheets("URLs"

我有几个类似的例子,它们都声称有效,但我的却没有。Excel 2013,Office 365

' Sort the "URLs" worksheet after update
Worksheets("URLs").Activate
lngLastRow = Cells(65536, Range.Column).End(xlUp).Row
Set Range = Worksheets("URLs").Range("A3:E" & lngLastRow)

Worksheets("URLs").Sort.SortFields.Clear
Worksheets("URLs").Sort.SortFields.Add Key:=Range("B4:B" & lngLastRow), _
    SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
Worksheets("URLs").Sort.SortFields.Add Key:=Range("A4:A" & lngLastRow), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With Worksheets("URLs").Sort
    .SetRange Range("A3:E" & lngLastRow)
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
即使我不使用标题(将范围(“A3”)更改为“A4”)并手动使用结束范围(“33”而不是lngLastRow),也会出现错误“运行时错误“5”:过程调用或参数无效”

我用录音机创建了这个宏。我不知道为什么录制的宏在宏中不起作用

我从来没有得到过任何有工作经验的东西。我一直都在努力解决这个问题,但在这种情况下,我也无法解决这个问题。

试试这个:

' Sort the "URLs" worksheet after update
Sub Macro1()
    Worksheets("URLs").Activate
    Dim Range As Range
    Dim lngLastRow As Long
    lngLastRow = Worksheets("URLs").Range("A1048576").End(xlUp).Row
    Set Range = Worksheets("URLs").Range("A3:E" & lngLastRow)

    Worksheets("URLs").Sort.SortFields.Clear
    Worksheets("URLs").Sort.SortFields.Add Key:=Worksheets("URLs").Range("B4:B" & lngLastRow), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    Worksheets("URLs").Sort.SortFields.Add Key:=Worksheets("URLs").Range("A4:A" & lngLastRow), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With Worksheets("URLs").Sort
        .SetRange Worksheets("URLs").Range("A3:E" & lngLastRow)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

尝试将
Key:=范围(“B4:B”和lngLastRow)
更改为
Key:=工作表(“URL”)。范围(“B4:B”和lngLastRow)
。对于
范围(“A3:E”和lngLastRow)
范围(“A4:E”和lngLastRow)
相同的事情。让我们知道它是否有帮助:)这起作用了。你能解释一下原因吗?我知道这不是对伦敦的改变。Thanks@DrStrangepork-基本调试将有助于解释原因。基本上,您引用的范围/单元格不正确。很明显,你没有向我们展示你是如何声明你的变量的,所以我不能告诉你你是否有错误,但是我以标准的方式声明了lngLastRow和Range。不过,您似乎根本没有使用范围变量,所以这可能不是必需的。我问的原因是我从microsoft.com支持论坛上复制了我的示例,OP说代码解决了它们的问题。我只编辑了单元格的内容。一旦你做了“工作表(“URL”).Activate”,你所有的“工作表(“URL”)调用都应该是多余的。但这很好,很有效。我觉得VBA相当不直观。