我有一个包含许多工作表的数据工作簿(确切地说是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
答案 0 :(得分:0)
我无法判断这个问题是否已经解决了...... 我不知道原因,但对我而言,如果在调用sheets.count之前激活计算工作表的工作簿,它就可以工作。 我知道,你明确告诉它在哪个工作簿中计算工作表,但由于某种原因,这也发生在我之前,并且通过在计算工作表之前明确激活工作簿来解决。