Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何从每个工作表中获取此循环?_Vba_Excel - Fatal编程技术网

Vba 如何从每个工作表中获取此循环?

Vba 如何从每个工作表中获取此循环?,vba,excel,Vba,Excel,我从每个工作表中获取A-K列中的数据,并将其放入单个工作表中。目前我的代码正确地抓取了第一张纸,但之后就什么也得不到了。我真的不知道为什么 以下是我目前的代码: 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.Worksh

我从每个工作表中获取A-K列中的数据,并将其放入单个工作表中。目前我的代码正确地抓取了第一张纸,但之后就什么也得不到了。我真的不知道为什么

以下是我目前的代码:

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\u number
变量。您可以在循环的每次迭代中直接使用
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

我觉得自己像个傻瓜。。。谢谢你,安德伍德;)别担心,这是一个很容易犯的错误,并且很难发现它何时不会导致错误。我首先尝试了这个,它给了我一些问题,但当时我忘了在“ThisWorkBook”上添加.worksheet。不过这肯定更干净。谢谢