首页 > 解决方案 > 将总表插入工程图 Solidworks 宏

问题描述

我有一个用户需要轻松访问宏的下拉列表,该下拉列表将轻松快速地导入通用表格模板,并让他们通过光标单击将其放置在需要的位置。目前,我用于导入通用表格的代码可以工作,但我对实体工作参数不够熟悉,无法知道传递哪个参数以允许将表格粘贴到用户选择的位置。有问题的具体线路是Set swTable = swDrawing.InsertTableAnnotation2(True, 0, 0, swBOMConfigurationAnchor_TopLeft, MATABLE, 2, 1)

完整代码如下;

Option Explicit

Dim swApp As SldWorks.SldWorks

Dim swModel As SldWorks.ModelDoc2

Dim swDrawing As SldWorks.DrawingDoc

Dim swTable As SldWorks.TableAnnotation

Const MATABLE As String = "C:\STANDARD Tables\sampleTable.sldtbt"

Sub main()

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

If (swModel Is Nothing) Or (swModel.GetType <> swDocDRAWING) Then

swApp.SendMsgToUser ("To be used for drawings only, Open a drawing first and then TRY!")

Exit Sub

End If

Set swDrawing = swModel


Set swTable = swDrawing.InsertTableAnnotation2(True, 0, 0, swBOMConfigurationAnchor_TopLeft, MATABLE, 2, 1)

If Not swTable Is Nothing Then
   swTable.BorderLineWeight = 0
   swTable.GridLineWeight = 0

End If

End Sub

谢谢你。

标签: vbasolidworks

解决方案


第二个和第三个参数(其中有 0 和 0)用于设置表格的位置,但您还必须将第一个参数设置为False(指示 API 忽略锚点并使用您的 X 和 Y 坐标)。请参阅http://help.solidworks.com/2020/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IDrawingDoc~InsertTableAnnotation2.html

所以你的行将是,例如:

Set swTable = swDrawing.InsertTableAnnotation2(False, 10, 10, swBOMConfigurationAnchor_TopLeft, MATABLE, 2, 1).

但是,您的代码有几点

首先,您需要将文档加载到您的 VBA Solidworks 应用程序对象中。您编写的代码将无法工作,因为 swApp 没有活动文档。最好的方法是提供一个文件对话框并使用该OpenDoc6()功能将选定的文件加载到应用程序中。https://help.solidworks.com/2019/english/api/sldworksapi/Open_Document_Example_VB.htm

其次,获取鼠标位置并将其转换为InsetTableAnnotation2()函数的 X 和 Y 参数需要了解一些 WinAPI 和一些像素计算知识。这是完全可行的,但涉及一些编码。另一方面,如果您将 设置swApp.Visible为 true,那么当表格成功地插入到 Solidworks 文档中时,它将对用户可见并且可以随意拖动。您可能会发现这对您来说是一个更简单的解决方案。

顺便说一句,Solidworks 对许可和用户数量非常严格。您当然只需要 , 的一个实例swApp,因此在模块级别声明它,但您可能还需要检查是否有超过许可数量的错误。


推荐阅读