2015-01-13 6 views
0

Я пытаюсь создать макрос, который объявляет диапазон ячеек и копирует и вставляет каждую ячейку 1 за один раз в ячейку «A2». Это должно произойти только в том случае, если в ячейке в столбце присутствуют данные.Excel VBA Iteration Copy и Paste

Ошибка, которую я получаю, является ошибкой времени выполнения «1004» Определяемая приложением или объектная ошибка.

Я больше из C# фона, поэтому я надеюсь, что это просто синтаксическая ошибка, но это то, что у меня есть до сих пор.

Любая помощь будет принята с благодарностью.

Sub Update1() 
' 
' Update1 Macro 
' Update 
' 
    Dim PartListRange As Range 
    Dim PartListCell As Range 

    Set PartListRange = Sheets("Query").Range("C2:100") 

    For Each PartListCell In PartListRange.Cells 
    If Cell.Value <> "" Then 
     Worksheets("Query").Range(PartListCell).Copy _ 
     Destination:=Worksheets("Query").Range("A2") 
     ActiveWorkbook.RefreshAll 
    End If 
    Next PartListCell 

End Sub 
+0

Вы изучаете Range C2: C100, если он не пуст, скопируйте данные на тот же лист, столбец A? – peege

+0

Проблема с 'Set PartListRange = Таблицы (« Запрос »). Диапазон (« C2: 100 ») 1' является' C2: C100' – peege

+0

копирует данные по одному за раз в ячейку «A2» :) – demonLaMagra

ответ

1

Это немного другой способ сделать то же самое, используя .Cells(row,col) и установки значений с помощью цикла ,

Использование lastRow вместо строки 100. Вы можете изменить это, если нужно. Я включаю это, потому что в большинстве случаев это необходимо.

Что это делает:

  • Loop через диапазон 2-100 или 2-lastRow, в зависимости от вашего выбора.

  • Проверьте значение в столбце «C», чтобы убедиться, что он не пуст.

  • Если не пуст, скопируйте в Range («A2»). (Обратите внимание, на каждую итерацию, что матч условий будет переписано)

  • Паузы в действии, чтобы запустить макрос или вызвать другой юг, используя MsgBox, в этом примере в качестве заполнителя

Код: Отметьте строки, связанные с lastRow, чтобы использовать его.

Sub conditionalCopy() 

'Dim lastRow As Long 
Dim lRow As Long 
Dim sName As String 

    sName = "Query" 
    'lastRow = Sheets(sName).Range("C" & Rows.count).End(xlUp).row 

    'For lRow = 2 to lastRow  'Uncomment lastRow to use instead of 100 for max. 
    For lRow = 2 To 100    'Range("C2:C100")  
     If Sheets(sName).Cells(lRow, "C").Text <> "" Then 
      Sheets(sName).Range("A2").Value = Sheets(sName).Cells(lRow, "C").Value 
      MsgBox("Here is your break in the action..." & vbNewLine & _ 
        "Press Enter to continue loop") 
     End If 
    Next lRow 

End Sub 
+0

Как бы отредактировать это, чтобы каждый ячейка, которую она скопировала, была только вставлена ​​в ячейку «A2»? – demonLaMagra

+0

Вы имеете в виду A2 для каждой строки? Вы бы видели только последнее. Потому что они все переписали бы его. Если вы хотите сделать это, вы должны сказать '.Cells (2,« A »)' вместо '(lRow,« A »)' – peege

+0

Да, это то, что я хочу. В конце концов я буду вызывать другой макрос после каждой итерации для сбора данных на основе данных в ячейке «A2». – demonLaMagra

0
If Cel.Value <> "" Then 

Вы ввели Cell неправильно

ParListCell 

и часть: P

+0

Это не исправляет ошибку. Excel говорит, что ошибка связана с линией Set PartListRange = Sheets («Query»). Range («C2: 100») – demonLaMagra

+0

Благодарим вас за исправление моего неправильного написания ;-) – demonLaMagra

Смежные вопросы