我如何从每个工作表中获取这个循环?

我从每个工作表中抓取AK列中的数据,并将其放入一张表中。 我现在的代码是正确的抓住第一张纸,但之后没有任何东西。 我真的不知道为什么。

这是我现在的代码:

Sub compile() Dim srcRange, destRange As Range Dim wkSheet As Worksheet Dim wksheet_number, lastRow As Long wksheet_number = 1 For Each wkSheet In ThisWorkbook.Worksheets If wksheet_number > 1 Then lastRow = ThisWorkbook.Worksheets(wksheet_number).Cells(Rows.Count, "A").End(xlUp).Row Set srcRange = ThisWorkbook.Worksheets(wksheet_number).Range("A2:K" & lastRow) Set destRange = ThisWorkbook.Worksheets(1).Range("A2") If destRange.Value = "" Then srcRange.copy destRange Else Set destRange = srcRange.End(xlDown) Set destRange = srcRange.Offset(1, 0) 'destRange.Select srcRange.copy destRange End If wksheet_number = wksheet_number + 1 Else wksheet_number = wksheet_number + 1 End If Next wkSheet End Sub 

对缺乏评论的道歉,这是我应该下次可能添加的东西。 所以有人知道我哪里错了?

您需要对代码进行以下更正:

 Set destRange = destRange.End(xlDown) Set destRange = destRange.Offset(1, 0) 

你指的是srcRange而不是destRange ,所以它只是过度复制相同的范围(在其他工作表中)。

我同意@Andy G.这是您的程序的另一个更短的版本。 由于您正在循环工作簿中的每个工作表,因此不需要使用wksheet_numbervariables。 您可以直接在循环的每个迭代中使用wkSheet对象。

 Sub compile() Dim srcRange, destRange As Range Dim wkSheet, sheetDestination As Worksheet Dim columnCount, lastRow As Long rowCount = 2 'Starting at A2 Set sheetDestination = ThisWorkbook.Worksheets(1) 'Also could use the name like ThisWorkbook.Worksheets("MyReport") For Each wkSheet In ThisWorkbook.Worksheets If Not wkSheet = sheetDestination Then lastRow = wkSheet.Cells(Rows.Count, "A").End(xlUp).Row Set srcRange = wkSheet.Range("A2:K" & lastRow) Set destRange = sheetDestination.Range("A" & rowCount) srcRange.Copy destRange rowCount = rowCount + lastRow + 1 End If Next wkSheet End Sub