' ============================================================================== ' 模块名称: cBOMRow ' 模块类别: 类模块 (Class Module) ' 所属项目: BOMForge ' 模块职责: 封装单行 BOM 数据,提供属性访问,并内置状态跟踪 (脏标记) 机制 ' ============================================================================== Option Explicit ' 内部变量:映射 Excel 数据列 Private pExcelRowIndex As Long ' 记录该对象对应 Excel 表中的物理行号,保存时定位用 Private pRowNo As Long ' 行号 (如 10, 20) Private pModuleType As String ' 模块 (如 表壳, 罩壳, 接头) Private pCode As String ' 代号 Private pItemName As String ' 名称 (使用 ItemName 避免与内部 Name 关键字冲突) Private pQuantity As Double ' 数量 Private pCondition As String ' 选择条件 (核心修改字段) Private pRemark As String ' 备注 Private pCategory As String ' 类别 Private pParentCategory As String ' 上层类别 Private pCategoryCondition As String ' 类别选用条件 Private pCode66 As String ' 66代码 Private pBIPBaseRowNo As String ' BIP行号基数 ' 内部变量:状态追踪 Private pIsDirty As Boolean ' 脏标记:True 表示对象数据被修改过,需要写回 Excel ' 初始化对象时,默认状态为干净 (未修改) Private Sub Class_Initialize() pIsDirty = False End Sub ' ------------------------------------------------------------------------------ ' 属性: ExcelRowIndex (物理行号) ' ------------------------------------------------------------------------------ Public Property Get ExcelRowIndex() As Long: ExcelRowIndex = pExcelRowIndex: End Property Public Property Let ExcelRowIndex(ByVal vNewValue As Long): pExcelRowIndex = vNewValue: End Property ' ------------------------------------------------------------------------------ ' 属性: RowNo (BOM行号) ' ------------------------------------------------------------------------------ Public Property Get RowNo() As Long: RowNo = pRowNo: End Property Public Property Let RowNo(ByVal vNewValue As Long) If pRowNo <> vNewValue Then pRowNo = vNewValue: pIsDirty = True End Property ' ------------------------------------------------------------------------------ ' 属性: ModuleType (模块) ' ------------------------------------------------------------------------------ Public Property Get ModuleType() As String: ModuleType = pModuleType: End Property Public Property Let ModuleType(ByVal vNewValue As String) If pModuleType <> vNewValue Then pModuleType = vNewValue: pIsDirty = True End Property ' ------------------------------------------------------------------------------ ' 属性: Code (代号) ' ------------------------------------------------------------------------------ Public Property Get Code() As String: Code = pCode: End Property Public Property Let Code(ByVal vNewValue As String) If pCode <> vNewValue Then pCode = vNewValue: pIsDirty = True End Property ' ------------------------------------------------------------------------------ ' 属性: ItemName (名称) ' ------------------------------------------------------------------------------ Public Property Get ItemName() As String: ItemName = pItemName: End Property Public Property Let ItemName(ByVal vNewValue As String) If pItemName <> vNewValue Then pItemName = vNewValue: pIsDirty = True End Property ' ------------------------------------------------------------------------------ ' 属性: Quantity (数量) ' ------------------------------------------------------------------------------ Public Property Get Quantity() As Double: Quantity = pQuantity: End Property Public Property Let Quantity(ByVal vNewValue As Double) If pQuantity <> vNewValue Then pQuantity = vNewValue: pIsDirty = True End Property ' ------------------------------------------------------------------------------ ' 属性: Condition (选择条件) - 这是本工具最核心要修改的字段 ' ------------------------------------------------------------------------------ Public Property Get Condition() As String: Condition = pCondition: End Property Public Property Let Condition(ByVal vNewValue As String) ' 只有当新写入的值和原有的值不一样时,才判定为被修改,打上脏标记 If pCondition <> vNewValue Then pCondition = vNewValue pIsDirty = True End If End Property ' ------------------------------------------------------------------------------ ' 其他次要属性的 Get/Let ' ------------------------------------------------------------------------------ Public Property Get Remark() As String Remark = pRemark End Property Public Property Let Remark(ByVal vNewValue As String) If pRemark <> vNewValue Then pRemark = vNewValue pIsDirty = True End If End Property Public Property Get Category() As String Category = pCategory End Property Public Property Let Category(ByVal vNewValue As String) If pCategory <> vNewValue Then pCategory = vNewValue pIsDirty = True End If End Property Public Property Get ParentCategory() As String ParentCategory = pParentCategory End Property Public Property Let ParentCategory(ByVal vNewValue As String) If pParentCategory <> vNewValue Then pParentCategory = vNewValue pIsDirty = True End If End Property Public Property Get CategoryCondition() As String CategoryCondition = pCategoryCondition End Property Public Property Let CategoryCondition(ByVal vNewValue As String) If pCategoryCondition <> vNewValue Then pCategoryCondition = vNewValue pIsDirty = True End If End Property Public Property Get Code66() As String Code66 = pCode66 End Property Public Property Let Code66(ByVal vNewValue As String) If pCode66 <> vNewValue Then pCode66 = vNewValue pIsDirty = True End If End Property Public Property Get BIPBaseRowNo() As String BIPBaseRowNo = pBIPBaseRowNo End Property Public Property Let BIPBaseRowNo(ByVal vNewValue As String) If pBIPBaseRowNo <> vNewValue Then pBIPBaseRowNo = vNewValue pIsDirty = True End If End Property ' ------------------------------------------------------------------------------ ' 状态追踪:只读的 IsDirty 和重置方法 ' ------------------------------------------------------------------------------ Public Property Get IsDirty() As Boolean IsDirty = pIsDirty End Property ' 可以在写回 Excel 后,调用此方法将状态重置为干净 Public Sub ResetDirtyFlag() pIsDirty = False End Sub