我有一个月度报告,所以我有一个模板,每个月更新一次,然后运行代码以更新许多工作簿。我想设置需要排序的特定工作表,这样我每个月只需要更改一行代码(而不是几十行)。
我已经成功地将每个工作簿设置为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”。
答案 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")
吗?