vba常用的代码块以及所做的一些应用实例
Tips中为常用函数方法,每个文件的命名就是具体应用的模块
需求:将零件号与QAD号(由前期制造科给出,无固定模板)匹配后导入PDM系统
难点:得到的含QAD号的表格式不宜,且QAD号书写不标准,有的单元格含有多个值(每次更新会用横线划掉而不是删除)或空值,无法用vlookup匹配。
思路:新建两个sheet,第一个新建sheet放入整理好的零件号和QAD号(两列,一一对应,顺序无要求),第二个sheet放入系统导出的零件号(一列,顺序不变)。
构建两个二维数组:
''' vba
ReDim arr1(1 To a, 1 To 2)
For m = 1 To a
For n = 1 To 2
arr1(m, n) = Sheet2.Cells(m, n)
Next
Next
'''
循环比较并赋值:
For i = 1 To a
For j = 1 To b
If arr2(j, 1) = arr1(i, 1) Then
arr2(j, 2) = arr1(i, 2)
End If
Next
Next
需求:编写注塑件尺寸公差表查询函数,内置于excel中,通过调用函数即可得到相应公差
难点:国家标准注塑件尺寸公差查询表含四个参数:参数,材料、公差等级、匹配方式、基本尺寸,其中公差等级和材料决定匹配方式,由匹配方式、基本尺寸最终确定公差尺寸。
思路:编写两个函数来实现查询
DIN_Series(Material)包含材料参数同时确定公差等级,
DIN_Tolerance()包含匹配方式和基本尺寸并接受DIN_Series(Material)传来的公差等级;
最终用法为:DIN_Tolerance(DIN_Series(Material), strCode, dblDimension)
'公差值的列为基本尺寸,行为匹配方式,确定行、列索引即可过得公差值
'DIN_Series(Material)确定公差等级,作为参数传递给DIN_Tolerance()
'先定义表格中行数据,如DIN_TBL2_MT2_A,再定义列数据,将数值范围的极值放入两个数组MinDimension与MaxDimension,列数与列号相同
'判定(MinDimension(intI) <= dblDimension) And (dblDimension < MaxDimension(intI)),若符合则将极值数组列号赋给intCol,由此确定列索引
'定义二维数组,将行数据放入:DIN_TBL2(0, intI) = DIN_TBL2_MT2_A(intI),此二位数组的列序号与极值数组相同,故列可由intCol索引
'采用字符相加来包含匹配方式AB,并确定行索引
'根据strSeriesCode的值确定二维数组“Dim DIN_TBL2”的行数 ,如strSeries由DIN_Series(Material)确定公差等级为MT2,匹配方式为A,则 strSeries=MT2+A = MT2A
需求:根据要求批量生成并填写子sheet
难点:不同标签填写内容列数不一样
思路:新建一张sheet用于存放列数不一样的变量,如日期、零件号等,宏程序根据填写内容进行子sheet的填写
'按零件数新建sheet
'按类别复制不同标签模板到sheet
'对应内容复制填写,基本操作选择复制、选择粘贴。
需求:对比两张表格A/B,A中每一行有很多零件号,若在B中出现则将A中零件号所在单元格标红、所在行标绿,若不存在整行标红
难点:表格A中零件号书写不规则,单个单元格存在多个零件号(旧的被横线划掉)
思路:如果仅是判断存在与否,用字典方法最为简单,但需要获取行列号,数组最为实用。部分零件号存在相同情况,需单独判断。
'创建两个数组分别放置A/B的零件号,其中A的零件号为行中某几列,B中零件号为某一列
'循环对比,相同则获取A数组行列号进行相关标记
需求:根据零件号生成相应子sheet并填写相关单元格校验公差
难点:不同零件会分为两件匹配或三件匹配,不同匹配方式填写内容和校验方式都不同,校验时需要查询关联到另一张表用于查询尺寸公差;需要将零件名和对应子sheet建立超链接;
思路:这个技术难度不是很高,就是工作量大,所涉及的知识点主要包括、子sheet创建、超链接创建、表间和表内数据引用等,详见代码。
'