在不选择该工作表的情况下对另一工作表中的列进

时间:2013-09-25 17:46:46

标签: excel vba excel-vba

是否可以在不选择该工作表的情况下对另一个工作表中的列进行排序? 问题是当我运行这段代码时,我希望隐藏这个工作表,当我需要对表进行排序时,我不希望它闪存到它。这是我的代码...这有效,但它显然选择了工作表并显示另一个工作表。也许用“制作活动表”的东西可以工作,然后说'制作活动单元'。我不确定。多谢你们。

 Application.Worksheets("RawDataLines").Select

    Application.Worksheets("RawDataLines").Range("Q5").Select
    Application.Worksheets("RawDataLines").Range("A4:R1007").Sort Key1:=Range("Q5"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal

    Application.Worksheets("RawDataLines").Range("A5").Select
    Application.Worksheets("RawDataLines").Range("A4:R1007").Sort Key1:=Range("A5"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal

3 个答案:

答案 0 :(得分:6)

此:

Application.Worksheets("RawDataLines").Select
Application.Worksheets("RawDataLines").Range("Q5").Select
Application.Worksheets("RawDataLines").Range("A4:R1007").Sort ... 

可能是这样的:

With Application.Worksheets("RawDataLines")
    .Range("A4:R1007").Sort  Key1:= .Range("A5")'...
End With

答案 1 :(得分:1)

添加ScreenUpdating

Application.ScreenUpdating = False
 #Your Code
Application.ScreenUpdating = True

只需确保在设置ScreenUpdating = True

之前将选择设置回您想要的表格

答案 2 :(得分:-1)

这里的问题来自VBA排序方法的Key1 arguments。即使我们在相关工作表中明确传递范围,但在涉及Key1:=Range(…)时,VBA会自动采用ActiveSheet.Range(…)

如果我们选择了其他工作表而不是排序数据工作表,则VBA将显示运行时错误。

要解决此问题,请将代码更改为Key1:=Your_Sheet_With_Data.Range(Your_Range)。例如,可以将上述代码固定为

Key1:=Worksheets("RawDataLines").Range("Q5")