使用solidworks宏根据excel文件将零件插入到装配中

时间:2013-10-28 21:05:07

标签: excel vba excel-vba solidworks

我正在编写一个宏,最终(希望!)从excel或文本文件中读取部件号,然后搜索我的部件库的配置并将相应的组件插入到程序集中,然后进行相应的配置活性。

插入零件和/或组件时遇到问题。 我开始记录插入零件的宏。很简单。它使用AddComponent命令,该命令需要文件路径和x-y-z坐标。这似乎工作正常,但它不断出现故障。 从我能够弄清楚的是,这个命令无法插入零件或装配体,除非在当前的solidworks会话期间已经使用了该零件或装配体。

Option Base 1 
Dim swApp As Object 
Dim Part As Object 
Dim SelMgr As Object 
Dim boolstatus As Boolean 
Dim longstatus As Long, longwarnings As Long 
Dim Feature As Object 
Dim filepath As String 
Dim partnum(8) As String 
Dim posx As Integer 
Dim posy As Integer 
Dim posz As Integer 
Dim x As Integer 

Sub main() 
Set swApp = Application.SldWorks 
Set Part = swApp.ActiveDoc 
Set SelMgr = Part.SelectionManager 

posx = 0 
posy = 0 
posz = 0 

partnum(1) = "07010304" 
partnum(2) = "07010318" 
partnum(3) = "07010321" 
partnum(4) = "07010331" 

For x = 1 To 8
filepath = "C:\Documents and Settings\user\My Documents\Solid Works Testing\Parts\"+ partnum(x) + ".SLDPRT" 
Part.AddComponent filepath, posx, posy, posz 
filepath = "C:\Documents and Settings\user\My Documents\Solid Works Testing\Assemblies\" + partnum(x) + ".SLDASM" 
Part.AddComponent filepath, posx, posy, posz 
posx = posx + 1.5 
Next 

End Sub 

该宏抓取三个部分07010304.SLDPRT,07010318.SLDPRT等一个组件(由这些部件组成)并将它们插入到活动组件中,并将它们隔开。

  1. 如果我打开一个程序集并运行宏,则没有任何反应。
  2. 如果我打开一个程序集,插入多维数据集,删除它,然后运行宏,它会插入多维数据集。
  3. 如果我打开一个组件,插入所有零件,删除它们,然后运行宏,它会插入所有零件(但不包括由两个零件组成的组件)。
  4. 如果我打开装配体,插入立方体球体装配体,删除它并运行宏,它将插入立方体,球体和立方体球体装配体,但不插入圆柱体。
  5. 如果部件已在一个组件中使用,另一个已打开或处于活动状态,则宏在新窗口中正常工作。
  6. 总之,我该如何解决这个问题?是否有另一个命令来插入不依赖于“加载到SW内存”的部件,似乎正在发生的事情?或者执行此操作的命令并将部件加载到SW存储器中?

1 个答案:

答案 0 :(得分:3)

首先,您错过了正在使用的SolidWorks版本。因此,了解应使用哪种API方法变量非常重要(例如,在SolidWorks 2013中,它将是AddComponent5而不是AddComponent)。

这个重要细节的一部分,通常是说,SolidWorks处理组件的方式与您已经注意到的完全相同。

根据SolidWorks API文档,要将组件添加到装配体,首先需要将该文件加载到内存中。使用 OpenDoc 方法将文件加载到内存中(请注意,这取决于您拥有的SolidWorks版本,在2013年您应该使用 ISldWorks :: OpenDoc6 ISldWorks :: OpenDoc7 )。

您还应该考虑到调用 ISldWorks :: OpenDoc6 不会激活&如果ModelDoc2(文档)已在程序集或工程图文档中打开(在内存中),则显示它。

ISldWorks :: OpenDoc6 返回对ModelDoc2(IModelDoc2)的引用。使用获得的引用并将其传递给ISldWorks :: ActivateDoc2或ISldWorks :: IActivateDoc3以激活和显示。

您还应该查看相关的OpenDoc事件,如FileOpenNotify2,ActiveDocChangeNotify和ActiveModelDocChangeNotify,以微调和控制文档的加载和激活过程。

以下是相关API文档页面的一些链接(API 2013):

AddComponent5

http://help.solidworks.com/2013/English/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IAssemblyDoc~AddComponent5.html

OpenDoc6

http://help.solidworks.com/2013/English/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isldworks~opendoc6.html

OpenDoc7

http://help.solidworks.com/2013/English/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isldworks~opendoc7.html

AddComponent5示例:添加组件并配对

http://help.solidworks.com/2013/English/api/sldworksapi/add_component_and_mate_example_vb.htm