工作表中的可变故障()

时间:2014-07-10 22:40:32

标签: excel vba variables excel-vba

我正在编写一个excel宏,它旨在循环工作表复制部分并将它们粘贴到具有相同工作表名称的不同工作簿中。每个实际的工作表名称代表本季度的星期五(13张),所以明天是2014年7月11日的071114。

我已将第1周 - 第13周的vba变量设置为这些选项卡名称。我希望下面的For循环可以循环到第1周到第13周,但它并没有按照我想要的方式工作,因为计算机正在搜索名为"第1周和第34天的选项卡。而不是变量week1。我想我只是要更改选项卡名称,但如果有办法,我想知道将来参考。

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

2 个答案:

答案 0 :(得分:3)

我会使用数组。就像下面一样。还没有测试过,但是应该让你知道我在说什么。

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

答案 1 :(得分:2)

@Vikas'解决方案,它使用数组将工作表名称存储为String变量,这是一个很好的建议。由于您的WorkbookRange变量似乎也已定义,因此您可以通过避免.Activate.Select方法进一步优化宏,这两种方法是运行时错误的两个常见来源,而是使用Range.Copy方法:

'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

以下是Range.Copy方法的MSDN链接,其中包含更多示例:http://msdn.microsoft.com/en-us/library/office/ff837760(v=office.15).aspx

这是一篇内容丰富的帖子,其中包含有关如何避免使用.Select.Activate的建议:How to avoid using Select in Excel VBA macros