运行时错误424;尝试DIM命名的(在多个工作簿中找到)工作表

时间:2019-04-12 19:40:48

标签: excel vba runtime-error

我有一个月度报告,所以我有一个模板,每个月更新一次,然后运行代码以更新许多工作簿。我想设置需要排序的特定工作表,这样我每个月只需要更改一行代码(而不是几十行)。

我已经成功地将每个工作簿设置为WB1(模板),WB2,WB3等,并且每个工作簿都具有相同的工作表(一月,二月,三月等)。我的代码将复制我在模板中执行的操作,将其粘贴到每个工作簿中,更新其数据透视表,然后在月度工作表上对结果进行排序。

'Dim March worksheet?

Dim WS As Worksheets
    Set WS = Workbook.Sheets("Mar")

'sort for worksheets
'Macro3 Macro


wb2.WS.Sort.SortFields.Add Key:=Range("C3:C190" _
        ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With wb2.WS.Sort
        .SetRange Range("B2:E189")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
        .SetRange Range("B191:E8040")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

我希望能够更改暗色(即下个月更改为“ APR”),因为该表上需要整理许多工作簿。当前,如果我不尝试使工作表变暗,而仅用Worksheets(“ Mar”)替换WS,它就可以工作,但是这将需要对“ APR”,“ May”等进行许多更改。我只想在设置变量的行中更改“ Mar”。

1 个答案:

答案 0 :(得分:1)

Dim WS As Worksheets是问题的一部分。您要As Worksheet(不是“ s”,它是一张纸,而不是纸页的集合)。然后尝试分配它:

Set WS = Workbook.Sheets("Mar")

我们不知道Workbook是什么,但是假设它持有对要使用的Workbook对象的有效对象引用,则需要从{{ 1}}集合,以免日后出现意外情况:Worksheets可以包含Sheets个对象,还可以包含Worksheet个项目,以及六种其他没有{ {1}}成员。

Chart

假设Range已经拥有要使用(?)的wb2.WS.Sort.... 对象的引用,它是一个wb2对象,它公开了Workbook接口的成员,其中不包括任何Workbook成员。如果Workbook是上面声明和分配的WS对象,那么您就不需要限定它:就像WS知道它属于Worksheet一样,{{ 1}}知道Range属于什么。

您是要直接与Worksheet合作吗?

Worksheet

进一步:

Workbook

那个不合格的WS隐式地指的是当前WS.Sort..... 的任何工作表-可能不是您的意思。应该是.SetRange Range("B2:E189") 吗?