“案例 5”中显示的整个代码应该将工作表(“出勤”)重置回其原始状态,从而准备好用于我将教授的全新课程。 当在用户窗体上选择复选框(5) 时,将执行此代码。 不工作的部分如下:
If x <> 1 Then
cksum = cksum + 1
Worksheets("Attendance").Range("J12:BN14").Copy
Worksheets("Attendance").Range("J12:BN14").Offset(Step, 0).PasteSpecial
Paste:=xlPasteValuesAndNumberFormats
End If
您会注意到,我使用了一种方法来检查它是否正在使用计数器“cksum”执行此例程,它执行了 19 次。 但是,它不会复制指定的范围。 目标范围仍然是空的。
Case 5 'ATTENDANCE Spreadsheet
Worksheets("Attendance").Range("J1:BG7").ClearContents
Worksheets("Attendance").Range("J10:BG10").ClearContents
Worksheets("Attendance").Range("A11:C90").ClearContents 'Student names
Step = 0
ck = 0
cksum = 0
For x = 1 To 20
Worksheets("Attendance").Range("J11:BN11").Offset(Step, 0).ClearContents
** If x <> 1 Then
cksum = cksum + 1
Worksheets("Attendance").Range("J12:BN14").Copy
Worksheets("Attendance").Range("J12:BN14").Offset(Step, 0).PasteSpecial
Paste:=xlPasteValuesAndNumberFormats
End If **
Step = Step + 4
Next x
MsgBox "Copy routine executed " & cksum & " times."
Step = 0
For x = 1 To 20
Worksheets("Attendance").Range("D11").Offset(Step, 0).MergeArea.ClearContents
Step = Step + 3
Next x
'Worksheets("Attendance").Range("K8").Copy
'Worksheets("Attendance").Range("L8:BG8").PasteSpecial
xlPasteFormulasAndNumberFormats
Controls("Checkbox" & k) = False
Case 6
我没有尝试其他任何东西。 问题代码是从另一个论坛获得的,我的研究表明语法是正确的。
执行下面的代码时,您的
Step
变量的值为 0,因此 .Offset(Step, 0)
是 .Offset(0, 0)
,这意味着您正在覆盖源单元格,而不是将这些值复制到新位置。
Case 5 'ATTENDANCE Spreadsheet
Worksheets("Attendance").Range("J1:BG7").ClearContents
Worksheets("Attendance").Range("J10:BG10").ClearContents
Worksheets("Attendance").Range("A11:C90").ClearContents 'Student names
Step = 0
ck = 0
cksum = 0
For x = 1 To 20
Worksheets("Attendance").Range("J11:BN11").Offset(Step, 0).ClearContents
** If x <> 1 Then
cksum = cksum + 1
Worksheets("Attendance").Range("J12:BN14").Copy
Worksheets("Attendance").Range("J12:BN14").Offset(Step, 0).PasteSpecial
Paste:=xlPasteValuesAndNumberFormats
End If **