使用记录功能对Excel进行排序时出现“超出范围”错误

时间:2014-08-01 20:38:09

标签: excel vba excel-vba

我有一些编程经验,但我绝对没有VBA。我一直在Excel中使用记录宏功能,但是当我尝试排序时遇到了问题。我所做的就是点击"记录宏"然后按一列进行排序。但是当我尝试在具有相似数据(不同行数)的不同Excel工作表上运行此宏时,我得到一个超出范围的错误。错误指向第一行,ActiveWorkbook ...

我知道这是一个简单的问题,但我对如何解决这个问题毫无头绪。我们将不胜感激,请记住,我没有VBA经验。

Sub Macro3()
'
' Macro3 Macro
'
' Keyboard Shortcut: Ctrl+q
'

    ActiveWorkbook.Worksheets("ReportExport-3").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("ReportExport-3").Sort.SortFields.Add Key:=Range( _
        "G2:G15"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("ReportExport-3").Sort
        .SetRange Range("A1:BB15")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

End Sub

2 个答案:

答案 0 :(得分:0)

在其他Excel工作表上运行此宏时,代码为:

ActiveWorkbook.Worksheets("ReportExport-3") ...

仍然按名称引用具有指定名称的工作表,即"ReportExport-3"。我怀疑你想要的是引用ActiveSheet,无论你运行宏时可能是什么,所以尝试将所有引用替换为:

Worksheets("ReportExport-3")

使用:

ActiveSheet

然后应该使用运行宏时活动工作表的任何内容。

答案 1 :(得分:0)

尝试替换所有出现的:

ActiveWorkbook

使用:

ThisWorkbook
在你的宏中

这可以确保宏在包含它的工作簿上运行,而不是在活动工作簿上运行,该工作簿可能是不同的工作簿,不包含您引用的工作表(" ReportExport-3")。