所以我想做的事情如下:
我有一个工作簿,其中包含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
这不会给出错误消息但也不起作用。
我该如何解决这个问题?
答案 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