分类目录归档:VBA 开发

Excel VBA 开发。

VBA 开发:利用 Excel 创建 BOM 树状结构

最近在设计一个模具系统的工艺 BOM,其结构参考了 ERP 中物料 BOM 的结构样式,参考下图:

erp-bom-style

为了方便前期的数据收集,我将上面的树状结构设计成了一个 Excel 表格,表格样式见下图:

Mold-BOM-Style

表格中第1列“层次”表示项目的所在阶层的层号,即表示:第1层,第2层,第3层……;第2列“项次”表示相应阶层的顺序号,即:第2层第1项,第2层第2项,第2层第3项……

So,问题来了,在确定了项目所在层后,如果该层存在很多项时,“项次”的输入就很麻烦,导致表格的 Key-IN 负荷大大增加(~其实主要是因为我比较懒!)。如果“项次”列能够根据所在层次自动判断并输入相对应的顺序号的话,那表格的 Key-IN 负荷就会降低很多。

经过一番摸索和求助后,终于找到了解决方法(感谢 @LIUZHU):

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim r%, i%, n%
    Dim Arr()

    If Target.Cells.Count > 1 Then Exit Sub
    If Target.Column <> 1 Then Exit Sub
    If Target.Row = 1 Then Exit Sub

    If Target.Row = 2 Then
        Target.Offset(0, 1).Value = 1
    Else
        r = Target.Row
        Arr = Range("A2:B" & r).Value

        For i = UBound(Arr) - 1 To 1 Step -1
            If Arr(i, 1) = Target.Value Then
                n = n + 1
            ElseIf Arr(i, 1) < Target.Value Then
                n = n + 1
                Arr(UBound(Arr), 2) = n
                Exit For
            End If
        Next
        Range("A2:B" & r).Value = Arr
    End If
End Sub

如果你也有同样的需求,不妨试一下上面这个方法!

Enjoy It!