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

我有一个数据工作簿与一些工作表(3确切)。 我想从每个工作表复制数据,并将它们全部添加到一个工作表(在另一个之前追加一个)在第二个工作簿中。 所有的工作表都有相同的格式和相同的列,所以我可以放心地做到这一点,而不用担心数据的一致性。 问题是,我使用的for循环运行代码21次,即使我只有3个工作表,并没有复制和粘贴发生。 我用MsgBox进行debugging。 以下是在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 

我不知道这个问题是否已经解决了,所以…我不知道这个原因,但是对于我来说,如果你在调用sheets.count之前激活了你正在计算表单的工作簿, 我知道,你明确地告诉了它在哪张工作簿中统计工作表,但由于某种原因,这也发生在我之前,并且通过在计数工作表之前明确地激活工作簿来解决。