2016-09-01 4 views
0

Я пытаюсь скопировать весь диапазон от «ведет» лист после последней строки «TempDataNew»Копирование диапазона После последней строки

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 

Я получаю «Применение или объекта Defined Error ", когда код пытается вставить. Есть предположения?

+0

получить lastRow использовать 'lastrowdyn = Sheets ("ведет"). Cells (Sheets ("Ведет"). Rows.Count, "A"). End (xlUp) .Row)' Вопрос, где находится строка «Вставить»? –

+0

@ ShaiRado- линия, за которой следует .copy. Я попытался использовать Destination: =, а также .PasteSpecial xlPasteValues. Такая же ошибка. – Tanmoy

ответ

1

из того, что я могу сказать, вы хотите скопировать в нижней части используемого диапазона TempDataNew, не Leads. Таким образом изменить

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

к этому

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

Кроме того, я предполагаю, что вы действительно не хотите или нужно скопировать весь столбец A из Leads. Поэтому это нужно изменить.

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

или это именно то, что вы в конечном итоге сделаете. Могу ли я рекомендовать также найти последнюю строку используемого диапазона в столбце A Leads, как вы хотите сделать для 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 

EDIT Если вы хотите скопировать столбец А в «Ведет» изменить

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

к этому

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

Это предполагает s у вас нет данных ниже строки 65000 в столбце А в листе «Ведет».

+0

Работает как шарм, ну ... почти. Код, который вы предоставили, копирует весь диапазон из листа «Leads» и вставляет его в «TempDataNew». Я действительно хочу скопировать содержимое столбца 1 и вставить его после последней строки столбца 1 в листе «TempDataNew». Есть предположения? – Tanmoy

+0

Простейшим решением было бы вставить столбец после столбца 1 в «Leads». Но я не знаю, приемлемо ли это в вашей ситуации. –

+0

Если это неприемлемо, см. Мое редактирование. –

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 
+0

немного обновил код, чтобы отразить, что вы хотите увеличить значение x с каждой итерацией – rohrl77

+0

x = 2 до начала этого цикла. Таким образом, он показывает «A2». Но все же паста не будет работать. – Tanmoy

+0

что сообщение об ошибке сейчас? все такой же? и если да, то на какой линии это останавливается? – rohrl77

0

Я думаю, я нашел проблему, которую вы изначально испытывают в вашем коде ... Ваш первый IF оператор говорит If Sheets("Leads").Range("A1") <> "" Then. Вы ссылаетесь на объект диапазона и сравниваете его со значением. Ваша ошибка должна исчезнуть, если вы используете Sheets("Leads").Range("A1").Value <> "".

Я не уверен, почему вы хотите использовать .CurrentRegion, если вы работаете только с одним столбцом (я также не самый разбирающийся в логике VBA), но если вы просто пытаетесь найти последнюю строку , вы могли бы использовать что-то вроде этого:

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 
+0

Из-за низкой репутации я не могу ответить на ответ rohrl77, но если x должен быть счетчиком, вы никогда не захотите инициализировать его в своем IF-заявлении. – Tyeler

+0

Глядя на мой код снова, я вижу, что мне кажется об этом .. почему вы хотите, чтобы второй оператор IF высевал, который проверяет, по сути, одно и то же? Если A1 не является типом триггерной ячейки, у которого будет только значение, если вы хотите скопировать весь столбец. – Tyeler

+0

По-прежнему такая же ошибка. – Tanmoy

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