2015-01-23 5 views
1

По сути, я пытаюсь скопировать и вставить определенный диапазон ячеек на втором листе, поскольку программа пересекает диапазон ячеек на первом листе, пока ячеек не пусто. Мне нужен диапазон копирования и вставки, чтобы изменить на новые копии и вставленные ячейки для каждого цикла. Любая помощь будет очень признанаVBA Loop Debugging - Next Without For

Private Sub CommandButton1_Click() 

    Dim ws As Worksheet 
    Dim rng As Range 
    Dim i As Integer 
    Dim j As Integer 

    For i = 12 To 24 
     Set ws = ThisWorkbook.Sheets("Input") 
     With ws 
      If Not IsEmpty(Cells(i, 2)) Then 
      For j = 10 To -2 
       Set ws = ThisWorkbook.Sheets("Budget Output #2") 
       With ws 
        Set rng = .Range("Cell(5,i-j):Cell(17,i-j+1)") 
        rng.Copy 
        rng.Offset(0, 2).Insert Shift:=xlToRight 
        rng.Offset(0, 2).ColumnWidth = 20 
        Application.CutCopyMode = False 
      Next j 
    Next i 
      End If 
       End With 
     End With 

End Sub 
+0

Использование правильного отступа может показать вам, где вы ошибетесь. Каждый раз, когда у вас есть что-то «Конец», вы должны отступать от кода между началом и концом, чтобы вы заметили. – Chrismas007

ответ

2

Вам не нужны With заявления на одну строку. Это будет намного чище. Также с двумя листами вы должны использовать TWO-переменные листа. Наконец, я очистил ваш синтаксис Range(Cells, Cells). Хотя, это все равно не будет работать из-за вашего For j = 10 to -2. Чтобы двигаться назад, вы должны использовать Step -#.

Private Sub CommandButton1_Click() 

    Dim wsIn As Worksheet, wsOut As Worksheet 
    Dim rng As Range 
    Dim i As Integer 
    Dim j As Integer 

    Set wsIn = ThisWorkbook.Sheets("Input") 
    Set wsOut = ThisWorkbook.Sheets("Budget Output #2")  

    x = 2 
    For i = 12 To 24 
     If Not IsEmpty(wsIn.Cells(i, 2)) Then 
      Set rng = wsOut.Range("B:C") 
      rng.Copy 
      rng.Offset(0, x).Insert Shift:=xlToRight 
      rng.Offset(0, x).ColumnWidth = 20 
      Application.CutCopyMode = False 
      x = x + 2 
     End If 
    Next i 

End Sub 
+0

Нравится это? Для j = 10 To -2 Шаг -1 Установите rng = wsOut.Range (Ячейки (5, i-j), Ячейки (17, i - j + 1)) – Ben

+0

@Ben Это должно работать. – Chrismas007

+0

Хм, отладчик выделяет «Установить rng = wsOut.Range (Ячейки (5, i-j), Ячейки (17, i-j + 1)) Ошибка« с ошибкой ». любые идеи? Извините, если этот запрос выше и выше – Ben

1

Я позволю вам выяснить ответ. Вот правильная структура:

For i .... 
    For j ... 
     with ws 
     end with 
    next j 
next i 
+0

Есть еще много синтаксических ошибок, чем просто ... – Chrismas007

-1

У вас есть две переменные ws. Возможно, вы запускаете свой код справа.

Dim ws As Worksheet, sh As Worksheet 
    Set ws = Sheets("Budget Output #2") 
    Set sh = Sheets("Input")