在特定工作表中对范围进行排序不起作用

时间:2019-01-08 08:51:09

标签: excel vba

我编写了一个代码,可以对工作表上的一个标签“ Saisie”进行简单排序。当“ Saisie”是活动工作表时,它起作用。 但是我希望代码可以从另一张表运行。 代码是:

Range("H1:K2001").sort Key1:=Range("H1"), Order1:=xlAscending, Header:=xlYes

代码写在模块中。

因此,我添加了我认为在另一个工作表处于活动状态时必须进行排序的内容:

我尝试过:

Dim sh As Worksheet
Set sh = ActiveWorkbook.Sheets("Saisie")

sh.Range("H1:K2001").sort Key1:=Range("H1"), Order1:=xlAscending, 
Header:=xlYes

也:

With Worksheets("Saisie").Range("H1:K2001")
    .sort Key1:=.Range("H1"), Order1:=xlAscending, Header:=xlYes
End With

对于这两者,我都有一个“ 1004”错误。 有人知道为什么吗?

我创建了许多论坛,这些论坛似乎对其他用户也有效。

2 个答案:

答案 0 :(得分:2)

在第二次测试中:

With Worksheets("Saisie").Range("H1:K2001")
    .sort Key1:=.Range("H1"), Order1:=xlAscending, Header:=xlYes
End With

您必须使用Worksheets("Saisie").Range("H1")而不是.Range("H1")

答案 1 :(得分:1)

首先要检查:工作表是ActiveWorkbook的一部分吗?如果打开了另一个工作簿,则整个代码将在语句Set sh = ActiveWorkbook.Sheets("Saisie")处失败。您可以改用ThisWorkbook

假设这不是您的问题:您必须了解您可以在哪些对象上正常工作。由于SortKey,您的第一次尝试失败:您写Key1:=Range("H1")Range无条件地使用 active 工作表的范围,而这不是您想要的(它将失败)。 尝试例如

sh.Range("H1:K2001").sort Key1:=sh.Range("H1"), Order1:=xlAscending, Header:=xlYes

您的第二次尝试有一个不同的问题:您在Range子句中使用with并将Key1:=.Range("H1")写为critera。现在,.Range("H1")将相对于附带条款中的范围。这样可以有效地使用范围O1-再次不是您想要的范围。

有许多方法可以纠正此问题,例如使用附带条款中的工作表。

With ThisWorkbook.Worksheets("Saisie")
    .Range("H1:K2001").sort Key1:=.Range("H1"), Order1:=xlAscending, Header:=xlYes
End With