2014-03-05 102 views
0

我有几个类似的例子,所有的声明都可以工作,但我的不是。 Excel的2013,Office 365的使用VBA对Excel中的一个范围进行排序

' 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':无效的过程调用或参数”。

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

我从来没有得到任何与“:=”的工作。我一直需要解决这个问题,但在这种情况下,我也无法弄清楚。

+0

尝试改变'键:=范围( “B4:B” &lngLastRow)'来'键:=工作表( “网址”)范围( “B4:B” &lngLastRow)'。对于'Range(“A3:E”&lngLastRow)'和'Range(“A4:E”&lngLastRow)'同样的事情。让我们知道它是否有帮助:) –

回答

0

试试这个:

' 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 
+0

这工作。你能解释为什么吗?我知道这不是对lngLastRow的改变。谢谢 – DrStrangepork

+0

@DrStrangepork - 基本调试将帮助解释原因。基本上你错误地引用范围/单元格。显然,你没有向我们展示如何声明你的变量 - 所以我不能告诉你,如果你做了错误的事情 - 但我以标准方式声明lngLastRow和Range。你似乎根本没有使用Range变量 - 所以这可能不是必须的。 – Stepan1010

+0

我想问的原因是我将我的示例从microsoft.com支持论坛复制出来,OP说这些代码解决了他们的问题。我只编辑了单元格#。一旦你做了工作表(“网址”),激活',所有'工作表(“网址”)。呼叫应该是多余的。但没关系,它很有用。我觉得VBA很不直观。 – DrStrangepork