为什么用于复制和粘贴的 VBA 代码不起作用?

问题描述 投票:0回答:1

“案例 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 

我没有尝试其他任何东西。 问题代码是从另一个论坛获得的,我的研究表明语法是正确的。

excel vba copy-paste
1个回答
0
投票

执行下面的代码时,您的

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 **
© www.soinside.com 2019 - 2024. All rights reserved.