【问题标题】:Excel Macro: Apply sorting to each sheetExcel 宏:对每个工作表应用排序
【发布时间】:2016-10-27 13:55:51
【问题描述】:

这是我用来对除两个页面之外的每个页面应用排序的代码。系统抛出以下错误。 “选择范围类的方法失败”。

私有子命令按钮3_Click() 将 ws1 调暗为工作表

For Each ws1 In Worksheets
    If ws1.Name <> "Sheet1" And ws1.Name <> "Extra" Then

**ws1.Range("A1:V1000").Select**      Something is wrong here I suspect

ActiveWorkbook.Worksheets(ws1).Sort.SortFields.Clear

ActiveWorkbook.Worksheets(ws1).Sort.SortFields.Add Key:=Range("I2:I1000") _
    , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

ActiveWorkbook.Worksheets(ws1).Sort.SortFields.Add Key:=Range("T2:T1000") _
    , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

With ActiveWorkbook.Worksheets(ws1).Sort
    .SetRange Range("A1:V1000")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

End If
Next ws1

结束子

请帮忙。

【问题讨论】:

    标签: excel vba macros


    【解决方案1】:

    我会在Selecting 范围之前将Select 工作表。替换:

    ws1.Range("A1:V1000").Select
    

    与:

    ws1.Select
    Range("A1:V1000").Select
    

    如果您在下面的代码中使用.Range() 而不是Range(),则可能不需要这些Selections。另外由于ws1 是一个工作表对象,:

    ActiveWorkbook.Worksheets(ws1)
    

    应该替换为:

    ActiveWorkbook.Worksheets(ws1.Name)
    

    代码可能还有其他问题。

    【讨论】:

    • 非常感谢您的建议。我将其更改为 ...................ws1.Select ws1.Range("A1:V1000").Select 并更改了 ActiveWorkbook .Worksheets(ws1) 到 ActiveWorkbook.Worksheets(ws1.Name) 现在可以使用了
    • @Navy 感谢您的反馈。
    • @Navy - 注意ActiveWorkbook.Worksheets(ws1.Name) 可以缩短为ws1
    • @YowE3K 好评!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 2013-12-23
    • 2017-11-30
    • 2012-02-07
    相关资源
    最近更新 更多