接上一篇
当我完成了自动数据整理后,下一个目标是完成工艺分工表的自动整理
我想要实现的功能是,将基础数据表A列中代号为10位图号的单元格值挑出来,填入工艺分工表的A列中,再将图号对应的工艺分工填入工艺分工表的B列。
这个功能的难点是,基础数据表的A列中10位图的单元格不是连续的,如上图所示,10位图号的单元格是不规律出现的,因此我不能用之前的方法简单的用循环进行赋值。经过思考,我要实现这个功能需要用到循环嵌套。
基本思路:
1. 先用if判断语句,用len函数判断基础数据表的A3单元格内的数据是否为10个字符,如果是,则将A3单元格的值填入“工艺分工表”的A4单元格,将N3单元格的工艺分工值填入“工艺分工表”的C4单元格,在“工艺分工表”B4单元格填入版本号“A”, 如果否,则结束判断。
2. 用for循环变量i,将指针移动至A4单元进行下一轮判断,以此类推,完成对基础数据表的A列单元格值的逐个判断。
3. 在循环体中增加一个变量h,初始值为4,用做工艺分工表的指针,用h =h+1的方法,每执行一次工艺分工表的填写,h 的值就增加1,使得A4单元格填完后,下一次能够填写至A5单元格
具体代码如下:
dim h
h=4
for i = 3 to j
if Len(sheet3.range(“A” & i )) = 10 then
sheet2.range(“A” & h) = sheet3.range(“A” & i)
sheet2.range(“C” & h) = sheet3.range(“N” & i)
sheet2.range(“B” & h) = “A”
h = h + 1
end if
next

借助变量h,在此完成了两个表格异步指针的功能。
截止目前,我完成了从基础数据表向工艺BOM表和工艺分工表,两个数据表的自动转换。那么下一问题是,当完成了一个产品的数据整理后,表格中是填满数据的,如果我要开始下一个表格制作,必然要先删除前一个产品的数据,这时就诞生了自动清理旧数据的想法。
实现功能的思路:这个功能很简单,先搞清楚每个表格有几行,让后把多余的行删掉就行了,也可以预估一个足够大的行数,一次性删除。
我用的是第一种方法,先用do while ….. loop 算清楚每个表有多少行,再用清空单元格的值。
具体代码如下:
Sub 清除旧数据()
‘清空旧数据
Dim bom_Zi As Integer
Dim bom_h As Integer
’获得BOM结构导入表数据总行数
bom_Zi = 1
Do While Sheet1.Range(“A” & bom_Zi) <> “”
bom_Zi = bom_Zi + 1
Loop
‘获得BOM结构导入表数据总行数结束
For bom_h = 4 To bomZi
data-pid=“scWqr4l”> Sheet1.Range(“A” & bom_h, “T” & bom_h) = “” ’清空BOM结构导入表数据,从A列到T列Next
‘获得工艺分工导入表数据总行数

bom_Zi = 1
Do While Sheet2.Range(“A” & bom_Zi) <> “”
bom_Zi = bom_Zi + 1
Loop
For bom_h = 4 To bom_Zi
Sheet2.Range(“A” & bom_h, “C” & bom_h) = “” ’清空工艺分工导入表数据,从A列到C列
Next
‘获得基础数据表数据总行数
Do While Sheet4.Range(“A” & bom_Zi) <> “”
bom_Zi = bom_Zi + 1
Loop
For bom_h = 3 To bom_Zi
Sheet4.Range(“A” & bom_h, “O” & bom_h) = “” ’清空基础数据表数据,从A列到O列,
Next
End Sub
在基础数据表中插入一个按钮,命名为“清空旧数据”,设置点击执行上述宏代码。
此时,在基础数据表中共有两个按钮,一个是“清空旧数据”,另一个是“自动整理数据”,整个VBA程序的基本功能都建立起来了,实践过程中,我发现了一个新问题,即:有些10位图号的工艺分工单元格是空的,有些物料名称单元格是空的,这样生成的数据导入表,在新PLM软件中运行时,会出现报错的问题。
基于上述问题,我考虑,如何在自动整理数据前,增加一个数据校验的功能,使得发现错误后自动报错并停止程序运行,下一篇我们来讨论如何实现这个功能。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/178952.html