VBA在工作表更改事件期间运行变量循环

VBA在工作表更改事件期间运行变量循环,vba,loops,events,target,worksheet,Vba,Loops,Events,Target,Worksheet,无法使变量循环正常工作 电子表格的工作原理是将新数据粘贴到A到H列的下一个空行中,并且每次的行数可变 当列A中的目标行为0且信息从粘贴的数据中外推并显示在列J到N中时,会发生更改事件。但此代码仅适用于新数据的顶行。我相信这需要一个循环,但我不确定如何使这项工作 我曾试图在网上找到一个好的例子,但每次尝试我都很努力,失败了。非常感谢任何能帮助我或为我指明正确方向的人 Private Sub Worksheet_Change(ByVal Target As Excel.Range) On Error

无法使变量循环正常工作

电子表格的工作原理是将新数据粘贴到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
结束子节点

尝试以下操作:

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
Private子工作表\u更改(ByVal目标为Excel.Range)
变暗rw As范围
如果Application.Intersect(Target,Me.Columns(1))为空,则退出Sub
'在出现错误时转到enditall
Application.EnableEvents=False
对于Target.Rows中的每个rw
如果rw.单元格(1,“A”).值为“”,则
rw.单元格(1,“J”)=日期值(左(rw.单元格(1,“H”),10))
rw.单元格(1,“k”)=左侧(rw.单元格(1,“B”)、3)
rw.单元格(1,“L”)=中间(rw.单元格(1,“B”)、5、2)
rw.单元格(1,“M”)=左侧(rw.单元格(1,“D”)、1)
如果rw.Cells(1,“M”)=B,则rw.Cells(1,“N”)=rw.Cells(1,“E”)
如果rw.Cells(1,“M”)=S,则rw.Cells(1,“N”)=rw.Cells(1,“E”)*-1
如果结束
下一个rw
enditall:
Application.EnableEvents=True
端接头
试试这个:

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
Private子工作表\u更改(ByVal目标为Excel.Range)
变暗rw As范围
如果Application.Intersect(Target,Me.Columns(1))为空,则退出Sub
'在出现错误时转到enditall
Application.EnableEvents=False
对于Target.Rows中的每个rw
如果rw.单元格(1,“A”).值为“”,则
rw.单元格(1,“J”)=日期值(左(rw.单元格(1,“H”),10))
rw.单元格(1,“k”)=左侧(rw.单元格(1,“B”)、3)
rw.单元格(1,“L”)=中间(rw.单元格(1,“B”)、5、2)
rw.单元格(1,“M”)=左侧(rw.单元格(1,“D”)、1)
如果rw.Cells(1,“M”)=B,则rw.Cells(1,“N”)=rw.Cells(1,“E”)
如果rw.Cells(1,“M”)=S,则rw.Cells(1,“N”)=rw.Cells(1,“E”)*-1
如果结束
下一个rw
enditall:
Application.EnableEvents=True
端接头