' ============================================================================== ' 模块: M04_Config ' 职责: 系统配置、常量定义 ' ============================================================================== Option Explicit ' 源数据列号定义 (根据你的描述) Public Const COL_IDX_CODE As Long = 3 ' 代号 (C列) Public Const COL_IDX_NAME As Long = 4 ' 名称 (D列) Public Const COL_IDX_QTY As Long = 5 ' 数量 (E列) Public Const COL_IDX_COND As Long = 6 ' 选择条件 (F列) Public Const COL_IDX_CAT As Long = 8 ' 类别 (H列) Public Const COL_IDX_CODE66 As Long = 9 ' 66代码 (I列) - NEW Public Const SRC_START_ROW As Long = 4 ' 数据起始行 ' ------------------------------------------------------------------------------ ' BOM自动提取系统配置常量 ' ------------------------------------------------------------------------------ ' BOM库配置 Public Const BOMLIB_FILENAME As String = "BOM库.xlsx" Public Const BOMLIB_START_ROW As Long = 2 ' BOM库数据起始行(第1行是表头) Public Const OUTPUT_SHEET_NAME As String = "BOM提取结果" ' BIP上传工作表配置 Public Const BIP_UPLOAD_SHEET_NAME As String = "BIP上传" Public Const BIP_ROW_NUMBER_BASE As Long = 7000 Public Const BIP_SUPPLY_MODE As String = "一般发料" Public Const BIP_ISSUE_ORG As String = "重庆布莱迪仪器仪表有限公司" ' 库存比对工作表配置 Public Const INVENTORY_COMPARISON_SHEET_NAME As String = "库存比对" ' 输入列名称配置 Public Const INPUT_COL_MODEL As String = "型号" Public Const INPUT_COL_PRODUCT_MODEL As String = "产品型号" ' 输出列枚举 Public Enum OutputColumns oc_ProductionOrderNo = 1 ' 生产订单号 oc_OriginalModel = 2 ' 原始产品型号 oc_Azxs = 3 ' 安装形式 oc_Bkxs = 4 ' 表壳形式 oc_Gclj = 5 ' 过程连接 oc_Jycz = 6 ' 接液材质 oc_Lcfw = 7 ' 量程范围 oc_Fjgn = 8 ' 附加功能 oc_MaterialType = 9 ' 物料类型 oc_MaterialName = 10 ' 物料名称 oc_MaterialCode = 11 ' 物料编码 oc_MaterialQty = 12 ' 物料数量 oc_Remarks = 13 ' 提取备注 End Enum ' 型号解析常量 Public Const MODEL_SEPARATOR_PIPELINE As String = "|" ' 管道符分隔符 Public Const MODEL_SEPARATOR_DOT As String = "." ' 点号分隔符 Public Const MODEL_SEPARATOR_CARET As String = "^" ' 插入符分隔符(法兰隔膜) Public Const MODEL_HEADER_MIN_SEGMENTS As Long = 6 ' 表头最小段数 ' BOM库工作表列表(需要遍历的工作表) Public Const BOMLIB_SHEET_JOINT As String = "接头" Public Const BOMLIB_SHEET_ELEMENT As String = "弹性元件" Public Const BOMLIB_SHEET_MOVEMENT As String = "机芯" Public Const BOMLIB_SHEET_COMPONENT As String = "部件" Public Const BOMLIB_SHEET_EDGE As String = "边" ' BOM库物料列名常量 Public Const BOMLIB_COL_NAME As String = "名称" Public Const BOMLIB_COL_CODE As String = "编码" Public Const BOMLIB_COL_QTY As String = "数量" Public Const BOMLIB_COL_JOINT_NAME As String = "接头名称" Public Const BOMLIB_COL_JOINT_CODE As String = "接头编码" Public Const BOMLIB_COL_JOINT_QTY As String = "接头数量" Public Const BOMLIB_COL_ELEMENT_NAME As String = "弹性元件名称" Public Const BOMLIB_COL_ELEMENT_CODE As String = "弹性元件编码" Public Const BOMLIB_COL_ELEMENT_QTY As String = "弹性元件数量" ' ------------------------------------------------------------------------------ ' 现存量工作表配置常量 ' ------------------------------------------------------------------------------ Public Const INVENTORY_SHEET_NAME As String = "现存量" Public Const INVENTORY_HEADER_ROW As Long = 3 ' 表头在第3行 Public Const INVENTORY_COL_CODE As String = "B" ' B列 = 物料编码 Public Const INVENTORY_COL_QTY As String = "J" ' J列 = 库存数量 ' BOM库条件字段列表(所有可能的条件字段) Public Function GetBOMConditionFields() As Variant GetBOMConditionFields = Array( _ "azxs", "bkxs", "gclj", "jycz", "lcdw", "lcfw", _ "fjgn", "btcy", "bp", "dskd", "nqlc", "bptx", _ "jddj", "cpdm", "tsjz", "tsyq", "bpts", "kdxh" _ ) End Function ' ------------------------------------------------------------------------------ ' 映射表配置常量 ' ------------------------------------------------------------------------------ Public Const MAPPING_SHEET_NAME As String = "对照表" Public Const MAPPING_COL_LCFW_KEY As Long = 1 ' A列 - lcfw原始值 Public Const MAPPING_COL_LCFW_VAL As Long = 2 ' B列 - lcfw映射值 Public Const MAPPING_COL_AZXS_KEY As Long = 4 ' D列 - azxs原始值 Public Const MAPPING_COL_AZXS_VAL As Long = 5 ' E列 - azxs映射值 Public Const MAPPING_START_ROW As Long = 3 ' 数据起始行 ' 检查列名是否为条件列 Public Function IsConditionField(ByVal colName As String) As Boolean Dim fields As Variant fields = GetBOMConditionFields() Dim i As Long Dim lowerColName As String lowerColName = LCase(Trim(colName)) For i = LBound(fields) To UBound(fields) If lowerColName = LCase(fields(i)) Then IsConditionField = True Exit Function End If Next i IsConditionField = False End Function ' 获取表头排序索引 (越小越靠前) Public Function GetHeaderPriority(key As String) As Long Dim vList As Variant Dim i As Long ' 定义标准排序顺序 vList = Array("azxs", "bkxs", "gclj", "jycz", "lcdw", "lcfw", _ "fjgn", "btcy", "bp", "dskd", "nqlc", "bptx", _ "jddj", "cpdm", "tsjz", "tsyq", "bpts", "kdxh") Dim sKey As String sKey = LCase(Trim(key)) For i = LBound(vList) To UBound(vList) If sKey = LCase(vList(i)) Then GetHeaderPriority = i Exit Function End If Next i ' 未知变量排在最后 GetHeaderPriority = 999 End Function