跳到主要内容

使用API事件处理程序捕获SOLIDWORKS命令的VBA宏

该宏允许捕获SOLIDWORKS命令ID(例如工具栏、页面按钮或上下文菜单的点击)。命令在swCommands_e枚举中定义,并可以使用SOLIDWORKS API中的ISldWorks::RunCommand方法调用。

当SDK中某些SOLIDWORKS API不可用时,这可能特别有用。

所有命令都有用户友好的名称,但它们不一定与用户界面中的名称匹配。这可能会导致很难找到正确的命令(因为当前有超过3000个可用命令)。例如,用户界面中的隐藏草图命令对应于swCommands_Blank_Refgeom命令ID。

捕获标准命令

该宏帮助直接从SOLIDWORKS中捕获命令的ID,只需点击所需的命令即可。

  • 运行宏,显示带有列表的窗体
  • 执行所需操作(例如点击按钮或菜单项)
  • 命令ID将被记录并显示在列表中

捕获隐藏草图命令ID{ width=350 }

可以在命令列表中查找命令ID

swCommands_e枚举中的隐藏草图命令ID{ width=350 }

不需要显式使用swCommands_e枚举,因为它在另一个互操作(solidworks.interop.swcommands.dll)中定义。相反,命令ID可以定义为整数或自定义枚举。

从自定义加载项捕获命令

对于标准SOLIDWORKS命令,User Command参数将等于0。但是,不能为任何自定义加载项或宏按钮定义命令。

如果点击了此命令,则命令ID将等于以下之一:

用户特定命令ID{ width=450 }

Command将指示按钮的类型(最小化工具栏、菜单、宏按钮等),而User Command Id将等于自定义按钮的用户ID。这是一个命令用户ID,可以通过在SOLIDWORKS加载项中创建自定义命令管理器时使用ICommandGroup::CommandId属性检索。

从自定义加载项中捕获命令{ width=250 }

创建宏

  • 将用户窗体模块添加到宏中,并将其命名为CommandsMonitorForm

VBA项目结构{ width=450 }

  • 将列表框控件拖放到窗体上,并将其命名为lstLog

将列表框控件添加到窗体{ width=450 }

  • 将代码添加到相应的模块中

Sub main()
CommandsMonitorForm.Show vbModeless
End Sub

CommandsMonitorForm

Dim WithEvents swApp As SldWorks.SldWorks

Private Sub UserForm_Initialize()
Set swApp = Application.SldWorks
End Sub

Private Function swApp_CommandOpenPreNotify(ByVal Command As Long, ByVal UserCommand As Long) As Long
lstLog.AddItem "Command: " & Command & "; User Command:" & UserCommand
End Function