/Excel_vba

个人使用的vba实例

Primary LanguageVisual Basic .NET

Excel_vba

vba常用的代码块以及所做的一些应用实例

Tips中为常用函数方法,每个文件的命名就是具体应用的模块

具体项目

QAD录入宏

需求:将零件号与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创建、超链接创建、表间和表内数据引用等,详见代码。

 '