将多个工作表中的范围复制到一个工作表中,在第一个空单元格中

时间:2017-11-02 12:12:15

标签: excel vba excel-vba loops

所以我想做的事情如下:

我有一个工作簿,其中包含2个包含一般信息的工作表,然后是30个包含学生信息的工作表(学生编号,姓名,成绩,最终工作组平均值),然后是概述表(" Overzicht-OSC" )。

我想要做的是仅复制学生编号(在C栏中)和最终工作组平均值(在L栏中),并将这些值粘贴到我的概览表中(" Overzicht-OSC")。所有工作组最多包含25名学生;通常更少,每组的数量不同。所以我想要的是将第一组的数字(在表3中)粘贴在" Overzicht-OSC"中,然后在该信息下粘贴第二组的数字(在表4中)等。,以便在最终概述中只有学生编号和成绩,跳过空白单元格。

我为此编写了以下代码:

Sub Overview()

Dim I As Integer
Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer
Dim currentRowValue As String

For I = 3 To 32

    Range("B8:B34,L8:L34").Copy
    Sheets("Overzicht-OSC").Select

        sourceCol = 1
        rowCount = Cells(Rows.Count, sourceCol).End(xlUp).Row

        For currentRow = 1 To rowCount
            currentRowValue = Cells(currentRow, sourceCol).Value
            If IsEmpty(currentRowValue) Then
                Cells(currentRow, sourceCol).Select
                Exit For
            End If
        Next

    ActiveCell.PasteSpecial Paste:=xlPasteValues

Next I

End Sub

但它不起作用!我一直收到各种错误信息。使用上面编写的版本,我得到了Range类的PasteSpecial方法失败'。

当我改变'ActiveCell.PasteSpecial'进入' Selection.PasteSpecial'我得到了这个选择无效。确保复制和粘贴区域不重叠,除非它们的大小和形状相同。

我之前也尝试过不同的代码:

Sub Overzicht2()

Dim I As Integer

For I = 3 To 32

    Range("C8:C34,L8:L34").Select
    Selection.Copy
    Sheets("Overzicht-OSC").Select
    Application.Goto Cells(Rows.Count, "A").End(xlUp).Offset(1), Scroll:=True
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Next I

End Sub

这不会给出错误消息但也不起作用。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您没有在代码中的任何位置引用工作表,并且不建议使用ActiveCell,因为不清楚哪个单元处于活动状态。也许这会起作用,虽然我也很谨慎使用工作表索引,因为可以很容易地改变 - 更好地使用工作表名称或代码名称。

Sub Overzicht2()

Dim I As Long

For I = 3 To 32
    Sheets(I).Range("C8:C34,L8:L34").Copy
    Sheets("Overzicht-OSC").Cells(Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
Next I

End Sub