VBA中的Worksheets.Count返回错误的页数

时间:2015-06-30 12:26:59

标签: excel vba excel-vba

我有一个包含许多工作表的数据工作簿(确切地说是3个)。我想复制每个工作表中的数据,并将它们全部添加到一个工作表中(在另一个工作表中添加一个)在第二个工作簿中。所有工作表都具有相同的格式和相同的列,因此我可以顺从地执行它而不必担心数据一致性。问题是我使用的for循环运行代码21次,即使我只有3个工作表,并且没有复制和粘贴。我使用MsgBox进行调试。以下是在Windows操作系统上使用Excel 2013的VBA编辑器编写的代码:

Sub compileData()
    ' compile all the data in one worksheet

    ' defining variables
    Dim i As Integer

    ' copy the headers
    Windows("source_file.xlsx").Activate
    Sheets(1).Activate
    Range("A3:K3").Select
    Selection.Copy
    Windows("target_file.xlsx").Activate
    Sheets(1).Activate
    Range("A1").Select
    ActiveSheet.Paste
    ' So far, so good! The header was copied & pasted with no problem.

    For i = 1 To Workbooks("source_file.xlsx").Worksheets.Count

        ' copy data from source worksheet
        Windows("source_file.xlsx").Activate
        Sheets(i).Activate
        Range("A4:K4").End(xlDown).Select
        Selection.Copy

        ' paste data
        Windows("target_file.xlsx").Activate
        Sheets(1).Activate
        Range("A2").End(xlDown).Offset(RowOffset:=1).Select
        ActiveSheet.Paste

    Next i

    MsgBox i      ' this returns 21 while source_file.xlsx has only 3 worksheets

End Sub

1 个答案:

答案 0 :(得分:0)

我无法判断这个问题是否已经解决了...... 我不知道原因,但对我而言,如果在调用sheets.count之前激活计算工作表的工作簿,它就可以工作。 我知道,你明确告诉它在哪个工作簿中计算工作表,但由于某种原因,这也发生在我之前,并且通过在计算工作表之前明确激活工作簿来解决。