2016-06-06 3 views
0

этот код vba для циклического прохождения и копирования и вставки новой строки каждый раз, пока не найдет нуль, продолжает давать мне ошибку времени выполнения ' 1004' . Я не могу понять, что вызывает его. Он ломается на Sheets("Regular Invoice").Range("A29:N29").Copy (согласно использованию ключа F8) Любая помощь с благодарностью.Ошибка во время выполнения '1004': Определенная приложением или объектная ошибка в VBA

Sub BoxTest() 

Dim testRow As Integer 
Dim pasteRow As Integer 


testRow = 2 
pasteRow = 30 
Worksheets("Boxes").Select 
Do Until Worksheets("Boxes").Range(testRow, 13).Value = 0 

Sheets("Regular Invoice").Range("A29:N29").Copy 
Worksheets("Regular Invoice").Cells(pasteRow, 1).PasteSpecial xlPasteAll 

testRow = testRow + 1 
pasteRow = pasteRow + 1 

Loop 
testRow = testRow + 1 
pasteRow = pasteRow + 1 


End Sub 

ответ

1

Хотя @MutjayLee уже отличный ответ, который я все еще хотел бы бросить в это дополнительное решение для Вашего рассмотрения:

Sub BoxTest() 

Dim testRow As Integer 
Dim pasteRow As Integer 
Dim lngLastRow As Long 

pasteRow = 30 

With ThisWorkbook.Worksheets("Boxes") 
    .Activate 
    lngLastRow = .Cells(.Rows.Count, 13).End(xlUp).Row 
    For testRow = 2 To lngLastRow 
     If .Cells(testRow, 13).Value = 0 Then Exit For 
     With ThisWorkbook.Sheets("Regular Invoice") 
      .Range("A29:N29").Copy Destination:=.Cells(pasteRow, 1) 
     End With 
     pasteRow = pasteRow + 1 
    Next testRow 
End With 

'Not really necessary 
'testRow = testRow + 1 
'pasteRow = pasteRow + 1 

End Sub 

Он избегает Do ... Loop и обменивает его с помощью For ... Next с возможностью выхода заранее, если ваше условие выполнено. Эти петли обычно предпочтительны, поскольку они являются определенными, а не неопределенными как Do ... Loop. Если условие задано некорректно для Do ... Loop, они могут работать неограниченно и сбой вашего Excel.

+0

Я считаю, что это действительно работает, но это, похоже, не будет работать для меня. Я продолжаю получать ошибку 1004, когда я пытаюсь запустить это. – Tokioi

+0

Извините, я сделал это снова и использовал 'Range', когда должно было быть' Cells'. Я исправил ошибку. Теперь это должно сработать. – Ralph

+0

Отлично работает, спасибо за помощь! – Tokioi

3

Эта линия проблема

Do Until Worksheets("Boxes").Range(testRow, 13).Value = 0 

вы можете сделать либо

Do Until Worksheets("Boxes").Cells(testRow, 13).Value = 0 

или

Do Until Worksheets("Boxes").Range("M" & testRow).Value = 0 

Только Ячейки принимают диапазон как номер строки и номер столбца.

Диапазон только принимает число как Row, и столбцы всегда должны быть Письмо

+0

Это было рабочим решением, спасибо за разъяснения по ячейкам и диапазону. Действительно полезно. – Tokioi

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