VBA在工作表更改事件期间运行变量循环
无法使变量循环正常工作 电子表格的工作原理是将新数据粘贴到A到H列的下一个空行中,并且每次的行数可变 当列A中的目标行为0且信息从粘贴的数据中外推并显示在列J到N中时,会发生更改事件。但此代码仅适用于新数据的顶行。我相信这需要一个循环,但我不确定如何使这项工作 我曾试图在网上找到一个好的例子,但每次尝试我都很努力,失败了。非常感谢任何能帮助我或为我指明正确方向的人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
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
端接头