探讨如何基于CATIA VBA实现键导出Bom信息到Excel中的功能。此外,还将探讨Excel的宏使用技巧。导出Bom信息到Excel中_腾讯视频
高清视频请访问如下链接查看:
01编程思路
首先设计一个如下图的Bom表,表中列出我们想要的Bom信息。Bom表每家企业都可能不一样,一般都是客制化的,根据需求来制作。
同样,Bom表的制作方法也有很多,本文介绍其中一种制作的思路。
代码按如下思路来写:如何获取产品的属性信息,如产品名称、产品编号、存储保存路径等等
如何获取所有需要的产品级别的属性信息,如导出一级部品、二级部品等
如何将获取到的产品属性信息写入Excel中
如何按照结构树的顺序将Bom信息导入Excel中
Excel的单元格的格式怎么修改
02如何设置Excel的颜色
颜色的设置方法有两种
一种通过索引:.Interior.ColorIndex = i
另一种用RGB值:.Interior.Color = RGB(255, 192, 0)
方法都是.Interior的颜色属性
03如何设置Excel的单元格式
>>>获取Excel的Application
Set xlApp = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
Err.Clear
Set xlApp = CreateObject("EXCEL.Application")
Else
Err.Clear
MsgBox "Please note you have to close Excel", vbCritical
Exit Sub
End If
xlApp.Visible = True
>>>新建工作薄
Set oSheet = xlApp.Application.workbooks.Add
>>>设置工作表单元格格式
With xlApp
.cells.Clear‘清除所有内容
.cells.ClearFormats ‘清除所有格式
.cells.Font.Name = "Microsoft YaHei" ‘字体微软雅黑
.cells.Font.Size = 10‘字体大小
.cells.HorizontalAlignment = 2‘对齐方式
.Range(.cells(oRow, oColumn), .cells(oRow, oColumn + 7)).Font.Bold = True‘字体加粗
.Range(.cells(oRow, oColumn), .cells(oRow, oColumn + 7)).Font.Color = RGB(255, 0, 0)‘字体颜色
End With
>>>其他设置方法
>>>另外,再说几个技巧合并单元格
.ActiveSheet.Range(.cells(1, "B"), .cells(1, "I")).Merge
不显示网格线
.ActiveWindow.DisplayGridlines = False
设置过滤
.ActiveSheet.Range(.cells(12, "B"), .cells(12, "I")).AutoFilter
等等,我们都可以通过Excel的宏录制找到。
04获取Excel最后一个非空单元格
如果能够获取到Excel的最后一个非空单元格,那么,我们写入数据的时候,只要永远写在Excel非空单元格的下一行,那么就能实现数据依次全部写入Excel中了。Excel中的书写方法是这样的:
Dim LastRow As String
LastRow = xlApp.Range("B" & xlApp.Rows.Count).End(xlUp).Row + 1
LastRow = xlApp.Range("A65536").End(xlUp).Row + 1
LastRow = xlApp.Range("A" & xlApp.Rows.Count).End(xlUp).Row + 1
LastRow = xlApp.Range("A1").End(xlDown).Row + 1
然而在CATIA中,你会发现这样写是行不通的,一定会报错。查询了很多资料后,终于找到一篇帖子,给出了一个解决办法:
在使用xlDown和xlUp方法前要先申明常量值:
Const xlDown = -4121
Const xlUp = -4162
虽然我到现在也没搞明白这几个数值的含义,但是,这种方法是可以解决问题的。
附上找到的那篇帖子原文,供大家参考:
放大点看
05获取产品不同级别的属性信息
>>>使用For ... next循环获取
需要哪一级别在for next里套上下面这个循环就可以
需要注意的是要修改
Fork=1To oProductDoc.Product.Products.Item(i).Products.Item(j).Products.Count
oProductDoc.Product.Products.Item(i).Products.Item(j).Products.Item(k).PartNumber
这里的.Products.Item(j)得到的是Product,Product下就是Products,Products是Product的集合,可以用item(i)来获取其中的Product,就这样一层一层的绕下去。
如果不太确定的时候,我们可以加个Select方法直接在结构树中测试
CATIA.ActiveDocument.Selection.Clear
CATIA.ActiveDocument.Selection.Add CATIA.ActiveDocument.Product.Products.Item(1).Products.Item(1) ~balabala
06详细代码
>>>详细代码如下
07参考资料
教程来自慧舟软件
PLM应用工程师
伍松 提供
更多资讯,请关注慧舟软件CATIA及PLM专家