工作表中的variables问题()

我正在写一个excelmacros,这个macros被devise为循环通过工作表复制部分,并将其粘贴到具有相同工作表名称的不同工作簿中。 每个实际的表名都代表本季度的星期五(13张),因此明天是2014年7月11日的071114。

我已经设置了一个vbavariablesweek1 – week13这些标签名称。 我希望下面的For循环通过week1到week13循环,但是它不能按照我希望的方式工作,因为计算机正在search名为“week1”的选项卡,而不是variablesweek1。 我想我只是要改变标签名称,但是我想知道如果有办法做到这一点,将来的参考。

For x = 1 To 13 wbD.Activate Worksheets("week" & x).Activate Range(carange).Select Selection.Copy wbC.Activate Worksheets("week" & x).Activate Range(carange).Select ActiveSheet.Paste Next x 

我会使用数组。 就像下面。 还没有testing过,但应该给你一个想法,我在说什么。

 Public Sub TestArray() Dim wkSheetNames(13) As String wkSheetNames(1) = "Some Name" wkSheetNames(2) = "Some Name" wkSheetNames(3) = "Some Name" '................. '................. wkSheetNames(12) = "Some Name" wkSheetNames(13) = "Some Name" For x = 1 To 13 wbD.Activate Worksheets(wkSheetNames(x)).Activate Range(carange).Select Selection.Copy wbC.Activate Worksheets(wkSheetNames(x)).Activate Range(carange).Select ActiveSheet.Paste Next x End Sub 

谢谢,V

@Vikas的解决scheme,它使用一个数组来存储作为Stringvariables的工作表名称,是一个很好的build议。 由于您的WorkbookRangevariables也似乎被定义,您可以通过避免.Activate.Select方法(运行时错误的两个常见来源),而是使用Range.Copy方法来进一步优化您的macros:

 'note: if carange is a named range defined in the worksheets, this code would 'need to be adjusted to ...Range("carange").Copy... For x = 1 To 13 wbD.Worksheets(wkSheetNames(x)).Range(carange).Copy _ Destination:=wbC.Worksheets(wkSheetNames(x)).Range(carange) Next x 

下面是带有更多示例的MSDN链接到Range.Copy方法: http : //msdn.microsoft.com/en-us/library/office/ff837760( Range.Copy .aspx

这里是一个超级信息的职位,提出如何避免使用.Select.Activate : 如何避免在Excel中使用Select VBAmacros