Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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
Excel 运行时错误“9”,下标超出范围错误_Excel_Vba - Fatal编程技术网

Excel 运行时错误“9”,下标超出范围错误

Excel 运行时错误“9”,下标超出范围错误,excel,vba,Excel,Vba,我不熟悉Excel和VBA编程,我已经制作了考勤表,希望通过按按钮将数据从一张表复制到另一张表 我在下面的行中遇到错误 lastrow1=图纸“Sheet14”。范围“A”和Rows.Count.EndxlUp.Row 我的代码 您的代码使用了错误的“”类型,而不是 最好远离“激活”、“选择”和“活动工作表”,而是使用引用的工作表和范围,这样速度也会更快 尝试下面的代码,它也会做同样的事情,只是更快更可靠,不依赖于ActiveSheet 修改代码 注:如果SeET2和SeET14中的数据是唯一的

我不熟悉Excel和VBA编程,我已经制作了考勤表,希望通过按按钮将数据从一张表复制到另一张表

我在下面的行中遇到错误

lastrow1=图纸“Sheet14”。范围“A”和Rows.Count.EndxlUp.Row

我的代码


您的代码使用了错误的“”类型,而不是

最好远离“激活”、“选择”和“活动工作表”,而是使用引用的工作表和范围,这样速度也会更快

尝试下面的代码,它也会做同样的事情,只是更快更可靠,不依赖于ActiveSheet

修改代码


注:如果SeET2和SeET14中的数据是唯一的,在整个表中只出现一次,考虑使用匹配函数,它将为循环节省1。

@ YOWE3K,你是对的,我后来注意到了:谢谢:LaSTROW2= SeeSsHET2.Range&SeeSsSeET2.Ro.Sq.Curn.EntXLUP。Row@Kanan我刚刚测试过,它对我有效,你确定吗您的工作簿中有sheet2?拼写如下?@Kanan您从上面复制了我的全部代码?所有代码?使用al;而不是您的“还有这个错误吗?无法追踪,sorry@Kanan好的,但是请打开一个chat@Kanan这是在SOI的某个地方,我没有赢得聊天的声誉…没有资格…因为这是第一次。如果你能提供你的电子邮件id,我可以给你发送文件。
Sub Button2_Click()

    Dim i As Long, j As Long, lastrow1 As Long, lastrow2 As Long
    Dim myname As String
    lastrow1 = Sheets(“Sheet14”).Range(“A” & Rows.Count).End(xlUp).Row

    For i = 7 To lastrow1
        myname = Sheets(“Sheet14”).Cells(i, “A”).Value

        Sheets(“sheet2”).Activate
        lastrow2 = Sheets(“sheet2”).Range(“A” & Rows.Count).End(xlUp).Row

        For j = 7 To lastrow2

            If Sheets(“sheet2”).Cells(j, “A”).Value = myname Then
                Sheets(“Sheet14”).Activate
                Sheets(“Sheet14”).Range(Cells(i, “D”), Cells(i, “AH”)).Copy
                Sheets(“sheet2”).Activate
                Sheets(“sheet2”).Range(Cells(j, “D”), Cells(j, “AH”)).Select
                ActiveSheet.Paste
            End If

        Next j
        Application.CutCopyMode = False
    Next i
    Sheets(“Sheet14”).Activate
    Sheets(“Sheet14”).Range(“D7”).Select
End Sub
Sub Button2_Click()

Dim i As Long, j As Long, lastrow1 As Long, lastrow2 As Long
Dim myname As String

With Sheets("Sheet14")
    lastrow1 = .Range("A" & .Rows.Count).End(xlUp).Row

    ' take the line below outside the For loop, there is no need to get the last row evey time 
    lastrow2 = Sheets("sheet2").Range("A" & Sheets("sheet2").Rows.Count).End(xlUp).Row        
    For i = 7 To lastrow1
        myname = .Range("A" & i).Value

        For j = 7 To lastrow2
            If Sheets("sheet2").Range("A" & j).Value = myname Then
                .Range("D" & i & ":AH" & i).Copy Destination:=Sheets("sheet2").Range(Range("D" & j & ":AH" & j))
            End If
        Next j
        Application.CutCopyMode = False
    Next i
End With

End Sub