我想在“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
当代码尝试粘贴时,我收到“应用程序定义或对象定义错误”。有什么想法吗?
答案 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