簡體   English   中英

在最后一行之后復制范圍

[英]Copying Range After Last Row

我試圖在“ 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

代碼嘗試粘貼時出現“應用程序定義錯誤或對象定義錯誤” 有什么想法嗎?

據我所知,您想復制到TempDataNew使用范圍的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

或這正是您最終將要做的。 我想建議您也為TempDatNew一樣在Leads A列中找到使用范圍的最后一行。 也許像

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

編輯如果您只想復制“鉛”中的列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)

假設您在“ Leads”表中A列的65000行下方沒有數據。

在開始運行代碼之前,您尚未指定x是什么。 我添加了一行以給出xa值。 用您的方式,excel將x評估為0,從而導致一個稱為Range("A0") ...的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

我想我發現了您最初在代碼中遇到的問題...您的第一個IF語句顯示If Sheets("Leads").Range("A1") <> "" Then 您引用范圍對象,並將其與值進行比較。 如果使用Sheets("Leads").Range("A1").Value <> "" ,則錯誤應消失。

我不確定如果只使用一列(我也不是VBA邏輯中最精通的),為什么要使用.CurrentRegion ,但是如果您只想查找最后一行,則可以使用這樣的東西:

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

為什么不只是這個呢?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM