最后一行后复制范围

时间:2016-09-01 12:32:59

标签: vba excel-vba excel

我想在“TempDataNew”

的最后一行之后复制“Leads”表中的整个范围
If Sheets("Leads").Range("A1") <> "" Then
                Set rngSource = Sheets("Leads").Range("A1").CurrentRegion
                lastrowdyn = rngSource.Rows.Count

                If lastrowdyn > 0 Then
                    Sheets("Leads").Range("A:A").Copy
                    Sheets("TempDataNew").Range ("A" & x)
                    Set rngSource = Sheets("TempDataNew").Range("A1").CurrentRegion
                    x = lastrowdyn + 1
                End If
            End If

当代码尝试粘贴时,我收到“应用程序定义或对象定义错误”。有什么想法吗?

4 个答案:

答案 0 :(得分:1)

据我所知,您希望复制到TempDataNew使用范围的底部,而不是Leads。所以改变这个

Set rngSource = Sheets("Leads").Range("A1").CurrentRegion

到这个

Set rngSourceTempDatNew = Sheets("TempDatNew").Range("A1").CurrentRegion
lastrowdynTempDatNew = rngSourceTempDatNew.Rows.Count 

另外,我猜你真的不想要或不需要复制Leads的整个A栏。所以这需要改变。

Sheets("Leads").Range("A:A").Copy

或者这正是你最终要做的事情。我还建议您在Leads的A列中查找已使用范围的最后一行,因为您要对TempDatNew执行此操作。也许像是

Set rngSourceLeads = Sheets("Leads").Range("A1").CurrentRegion

现在只需将Leads中的范围复制到TempDatNew中的正确位置就可以使用类似的内容进行复制

rngSourceLeads.Copy _ 
destination:=Worksheets("TempDatNew").Range("A" & lastrowdynTempDatNew + 1)

我无法准确地告诉您为什么要将最后一行加一到x,但我目前的想法是,您的目的并不需要它。每次运行此代码时,它都会为您更新TempDatNew的最后一行,然后只需粘贴在该行之后。

所以,总之,你有一些更简洁和准确的东西

If Sheets("Leads").Range("A1") <> "" Then
    Set rngSourceTempDatNew = Sheets("TempDatNew").Range("A1").CurrentRegion
    lastrowdynTempDatNew = rngSourceTempDatNew.Rows.Count
    Set rngSourceLeads = Sheets("Leads").Range("A1").CurrentRegion
    rngSourceLeads.Copy destination:=Worksheets("TempDatNew").Range("A" & lastrowdynTempDatNew + 1)
End If

修改的 如果您只想在&#34; Leads&#34;中复制A列;改变这个

Set rngSourceLeads = Sheets("Leads").Range("A1").CurrentRegion

到这个

lastrowdynLeads = Sheets("Leads").Cells(65000, 1).End(xlup).Row
Set rngSourceLeads = Sheets("Leads").Range("A1:A" & lastrowdynLeads)

这假设您在工作表&#34; Leads&#34;中的A列中的第65000行以下没有数据。

答案 1 :(得分:0)

在开始运行代码之前,您没有指定x是什么。我添加了一行来给x一个值。你有这种方式,excel正在评估x为0,从而导致一个名为Range("A0")的范围......不存在。

If Sheets("Leads").Range("A1") <> "" Then
    Set rngSource = Sheets("Leads").Range("A1").CurrentRegion
    lastrowdyn = rngSource.Rows.Count
    x = 1 'Whatever integer it is supposed to start at
    If lastrowdyn > 0 Then
        Sheets("Leads").Range("A:A").Copy
        Sheets("TempDataNew").Range ("A" & x)
        Set rngSource = Sheets("TempDataNew").Range("A1").CurrentRegion
        x = lastrowdyn + 1
    End If
End If

答案 2 :(得分:0)

我想我发现了您最初在代码中遇到的问题......您的第一个IF声明说If Sheets("Leads").Range("A1") <> "" Then。您引用范围对象,并将其与值进行比较。如果您使用Sheets("Leads").Range("A1").Value <> "",则您的错误应该消失。

我不确定为什么要使用.CurrentRegion,如果您只使用一个专栏(我也不是最精通VBA逻辑),但如果您和&#39} #39;只是想找到最后一行,你可以使用这样的东西:

Dim Leads, TempDataNew as Worksheet
Set Leads = ThisWorkbook.Sheets("Leads")
Set TempDataNew = ThisWorkbook.Sheets("TempDataNew")

    lastrowdyn = Leads.Cells(Leads.Rows.Count, "A").End(xlUp).Row

    If Leads.Range("A1").Value <> "" And lastrowdyn > 0 Then
        Leads.Range("A:A").Copy Destination:=TempDataNew.Range("A" & x)
        x = lastrowdyn + 1
    End If

答案 3 :(得分:0)

为什么不呢?

Sub CopyRange()
    Dim wsLeads As Worksheet, wsTemp As Worksheet
    Dim lLastRowNew As Long, lRows As Long, iColumns As Integer

    Set wsLeads = Worksheets("Leads")
    Set wsTemp = Worksheets("TempDataNew")

    lLastRowNew = wsTemp.UsedRange.Rows(wsTemp.UsedRange.Rows.Count).Row
    lRows = wsLeads.UsedRange.Rows.Count
    iColumns = wsLeads.UsedRange.Columns.Count

    If wsLeads.Range("A1").Value <> "" And lRows > 0 Then
        wsTemp.Cells(lLastRowNew + 1, 1).Resize(lRows, iColumns).Value = wsLeads.UsedRange.Value
    End If
End Sub