2015-09-02 5 views
1

Ошибка при работе с переменным контуром.VBA Запуск переменной цикла во время изменения рабочего листа

Электронная таблица работает, вставляя новые данные в следующую пустую строку в столбце от A до H и каждый раз имеет переменное количество строк.

Событие изменения происходит, когда целевая строка в столбце A равна <> 0, и информация экстраполируется из вставленных данных и отображается в столбцах от J до N. Но этот код работает только в верхней строке новых данных. Я считаю, что это требует цикла, но я не уверен, как это сделать?

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

Private Sub Worksheet_Change(ByVal Target As Excel.Range) 
On Error GoTo enditall 
If Target.Cells.Column = 1 Then 

    n = Target.row 
    arange = Range("A" & n) 
    brange = Range("B" & n) 
    crange = Range("C" & n) 
    drange = Range("D" & n) 
    erange = Range("E" & n) 
    frange = Range("F" & n) 
    grange = Range("G" & n) 
    hrange = Range("H" & n) 

    Dim myRange As Excel.Range 
    Dim myCell As Excel.Range 
    Set myRange = Target 

Application.EnableEvents = False 

For Each myCell In myRange.Cells 
If Excel.Range("A" & n).Value <> "" Then 
    Excel.Range("J" & n) = DateValue(Left(hrange, 10)) 
    Excel.Range("k" & n) = Left(brange, 3) 
    Excel.Range("L" & n) = Mid(brange, 5, 2) 
    Excel.Range("M" & n) = Left(drange, 1) 
    If Excel.Range("M" & n) = "B" Then Excel.Range("N" & n) = erange 
    If Excel.Range("M" & n) = "S" Then Excel.Range("N" & n) = erange * -1 
End If 
Next 

End If 

enditall:

Application.EnableEvents = True 

End Sub

ответ

0

Попробуйте это:

Private Sub Worksheet_Change(ByVal Target As Excel.Range) 

    Dim rw As Range 

    If Application.Intersect(Target, Me.Columns(1)) Is Nothing Then Exit Sub 

    'On Error GoTo enditall 

    Application.EnableEvents = False 

    For Each rw In Target.Rows 

     If rw.Cells(1, "A").Value <> "" Then 
      rw.Cells(1, "J") = DateValue(Left(rw.Cells(1, "H"), 10)) 
      rw.Cells(1, "k") = Left(rw.Cells(1, "B"), 3) 
      rw.Cells(1, "L") = Mid(rw.Cells(1, "B"), 5, 2) 
      rw.Cells(1, "M") = Left(rw.Cells(1, "D"), 1) 
      If rw.Cells(1, "M") = "B" Then rw.Cells(1, "N") = rw.Cells(1, "E") 
      If rw.Cells(1, "M") = "S" Then rw.Cells(1, "N") = rw.Cells(1, "E") * -1 
     End If 

    Next rw 

enditall: 

    Application.EnableEvents = True 
End Sub 
+0

Mate, который работал отлично! Спасибо! – CaptainDanJ