|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
修改了一下,有详细的注释
Private Sub Worksheet_Change(ByVal Target As Range) 'sheet2及本单元格变化执行这个事件(以下代码)
Application.EnableEvents = False '禁止刷新屏幕,以提高代码运行速度
If Target.Column = 1 Then '当子过程参数的列为1,及只有第1列的数据变化才执行这个if块的程序
Dim s, i&, j&, n$ '这里是申明变量,s后面没as 为可变型,i为长整型,相当于i as long。n为字符型 相当于 n as string
n = Target.Value 'n为单元格的值
i = Sheets("订单明细").Range("a" & Cells.Rows.Count).End(3).Row 'i为工作表“订单明细”中A列最后一个数据的行号
s = Sheets("订单明细").Range("a1:j" & i) 's等于A1到J最后一行 这个区域,这时s就是一个数组
For i = 2 To UBound(s) '从s数组的下表2开始到最后行,ubound是数组上限
If s(i, 1) = n And n <> "" Then '如果单元格不为空,并且等于数组中相应的项目
For j = 1 To 6 '循环6列
If j > 4 Then '应数据不对应,加一个判断
Cells(Target.Row, j + 1) = s(i, j + 3) '把值复制过来
Else
Cells(Target.Row, j + 1) = s(i, j + 1) '把值复制过来
End If
' Range("b" & Target.Row & ":j" & Target.Row) = Sheets("订单明细").Range("b" & i & ":j" & i).Value
Next j
' i = UBound(s)
End If
Next
End If
Application.EnableEvents = True '恢复刷屏
End Sub |
评分
-
2
查看全部评分
-
|