您好,欢迎来到东饰资讯网。
搜索
您的当前位置:首页VBA在BOM整理中的应用

VBA在BOM整理中的应用

来源:东饰资讯网
概述:

在BOM整理中应用VBA,提高准确度和效率。

我们在产品设计中很多情况下用ORCAD来设计原理图,用PADSLAYLOUT来画PCB。这对后面的BOM整理就带来了一定的麻烦,因为ORCAD中包含了器件的封装,值却没有层的信息。这个时候就需要我们再比照PCB出来的BOM来区别出每个器件的层。通常情况下我们只能人工一个个校对挑捡,不仅效率低,而且很可能出现差错。这个时候我们可以考虑实现一个实现将PCBBOM与ORCADBOM进行比较挑捡的程序,简化BOM的制作。

VisualBasicforApplications(VBA)是一种VisualBasic的一种宏语言,主要能用来扩展Windows的应用程式功能,特别是MicrosoftOffice软件。我们这里就是写一个针对EXCEL的的小程序,来实现BOM整理的功能。

设计记录:

1.首先,从ORCAD里导出器件BOM,如下图,

里面包含元件名及元件值

2.再从LAYOUT里导出器件BOM,如下图

里面包括元件名,元件封装及层

3.写一个VBA程序,将这两个表格比对来生成一个新BOM。这个BOM能够按照层、值、封装来分类器件。程序流程如下:

1).因为ORCAD里面值一样的排列在一起,所以流程1从ORCAD里开始,首先判断A(X)行值是否和A(X-1)行的器件值一样,若不一样,另起一行生成元件列表;若一样,进入流程2

华录2).判断元件是否在顶层,是进入流程3

3).判断该元件的封装是否已经在表示封装的字符串数组中,如果有,将该元件名添加到已有封装的那行元件上,如果没有,则另起一行生成有新封装的元件列表生成的BOM如下表

4.程序中可应注意的问题

1)第一个表格需为PCB导出表格,格式为元件名、封装、层;第二个表格为ORCAD导出表格,格式为序

2)果数据不正确程序会报错,比如ORCAD表格里有元件U1而PCB表格里没有,又或者ORCAD表格里有诸如R163D这样的元件名,D属于DESIGNATOR属性

3)报错可以用ONERRORRESUMENEXT这句来屏蔽,但不建议这样错,因为这样会忽略掉某些错误

PRIVATESUBWORKSHEET_BEFOREDOUBLECLICK(BYVALTARGETASRANGE,CANCELASBOOLEAN)

DIMTEMPTEMP=7

DIMFOOTPRINTF(5)ASSTRING'记录封装的数组,最大为5个,能满足要求FORI=1TO5

FOOTPRINTF(I)=\"AA\"NEXT

DIMFPCOUNT'封装数量里的封装数量FPCOUNT=1

华源代码如下:

录号,数量,元件名,值。每个元件单独为一行,去掉不必要的内容如抬头

DIMCOUNTCOUNT=1

DIMNUMBER'生成BOM的行数,按元件参数不同数量依次增加NUMBER=1

WORKSHEET(3).CELL(1,1).VALUE=WORKSHEET(2).CELL(1,4).VALUE'BOOK3第一列是值,第二列是封装,第三列数量,第四列器件名,第五列是层

WORKSHEET(3).CELL(1,4).VALUE=WORKSHEET(2).CELL(1,3).VALUE

ONERRORRESUMENEXT

FORI=2TO800

WITHWORKSHEET(1).RANGE(\"A1:A800\")

IF(WORKSHEET(2).CELL(I,4).VALUE=WORKSHEET(2).CELL(I-1,4).VALUE)THEN

IF(WORKSHEET(1).CELL(C.ROW,C.COLUMN+2).VALUE=\"TOP\")THEN

+K-1,4).VALUE+\+WORKSHEET(2).CELL(I,3).VALUE

TEMP=8ENDIFNEXT

华FORK=1TOFPCOUNTIF(TEMP=7)THEN

SETC=.FIND(WORKSHEET(2).CELL(I,3).VALUE,LOOKIN:=XLVALUES)

IF(WORKSHEET(1).CELL(C.ROW,C.COLUMN+1).VALUE=FOOTPRINTF(K))THENWORKSHEET(3).CELL(NUMBER+K-1,4).VALUE=WORKSHEET(3).CELL(NUMBER

录FPCOUNT=FPCOUNT+1

FOOTPRINTF(FPCOUNT)=WORKSHEET(1).CELL(C.ROW,C.COLUMN+1)

WORKSHEET(3).CELL(NUMBER+FPCOUNT-1,1).VALUE=WORKSHEET(2).CELL(I,

4).VALUE

WORKSHEET(3).CELL(NUMBER+FPCOUNT-1,2).VALUE=FOOTPRINTF(FPCOUNT)WORKSHEET(3).CELL(NUMBER+FPCOUNT-1,4).VALUE=WORKSHEET(2).CELL(I,

3).VALUE

ENDIFTEMP=7ENDIFELSE

IF(WORKSHEET(1).CELL(C.ROW,C.COLUMN+2).VALUE=\"TOP\")THEN

NUMBER=NUMBER+FPCOUNT

FOOTPRINTF(FPCOUNT)=WORKSHEET(1).CELL(C.ROW,C.COLUMN+1)

WORKSHEET(3).CELL(NUMBER,1).VALUE=WORKSHEET(2).CELL(I,4).VALUE

ELSE

略掉两个器件同值不同层的情况

ENDIF

NEXTENDSUB

华WORKSHEET(3).CELL(NUMBER,2).VALUE=FOOTPRINTF(FPCOUNT)

WORKSHEET(3).CELL(NUMBER,4).VALUE=WORKSHEET(2).CELL(I,3).VALUE

WORKSHEET(2).CELL(I,4).VALUE=WORKSHEET(2).CELL(I,4).VALUE+\"@@@\"'防止忽

录FPCOUNT=1

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuoyibo.cn 版权所有 湘ICP备2023022426号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务