【问题标题】:Use solidworks macro to insert parts into assembly based on excel file使用solidworks宏将零件插入到基于excel文件的装配体中
【发布时间】:2015-02-25 03:45:46
【问题描述】:

我正在编写一个宏,它最终(希望如此!)从 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. 如果零件已在一个装配中使用,而另一个已打开或激活,则宏在新窗口中可以正常工作。

总之,我该如何解决这个问题?是否有另一个命令可以插入不依赖于似乎正在发生的“加载到 SW 内存”的事情?还是执行此操作并将部件加载到软件内存中的命令?

【问题讨论】:

    标签: vba excel solidworks


    【解决方案1】:

    首先,您缺少正在使用的 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) 的一些链接:

    添加组件5

    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

    【讨论】:

    • 感谢您的建议和信息。是的,对不起,它是 SW2013 sp5。我会尝试您的建议,如果可行,我会回复您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多