从sub调用solidworks宏并传递全局变量

时间:2014-08-17 18:03:08

标签: vba solidworks

在Solidworks中,我录制了两个宏。

宏1为空:

Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

'added code
Dim distance_of_second_plane
'end of added code

Sub main()

    Set swApp = _
    Application.SldWorks

    Set Part = swApp.ActiveDoc
    'added code:  here I want to call the second macro and send it distance_of_second_plane, and have it use that value
     distance_of_second_plane = .05
     '.. now what?

    'end of added code, don't know what to add.

End Sub

宏2执行需要来自宏1的数据:

Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

    Set swApp = _
    Application.SldWorks

    Set Part = swApp.ActiveDoc
    boolstatus = Part.Extension.SelectByID2("Front Plane", "PLANE", 0, 0, 0, True, 0, Nothing, 0)
    Dim myRefPlane As Object
    Set myRefPlane = Part.FeatureManager.InsertRefPlane(8, 0.05334, 0, 0, 0, 0)
    Part.ClearSelection2 True

End Sub

这些宏当然保存在不同的文件中。如何从第一个调用第二个,从第一个传入数据,并在第二个中使用它?

我尝试过的事情:http://support.microsoft.com/kb/140033http://www.cadsharp.com/macros/run-macro-from-another-macro-vba/VBA module that runs other modulesCall a Subroutine from a different Module in VBA

所有这些都是有问题的。如果被问到,我会详细说明我得到的错误。

2 个答案:

答案 0 :(得分:0)

您可以创建一个单独的模块来封装常用方法。然后添加对该模块的引用,并从Macro1和Macro2子例程中调用它。

例如,在你的Macro1:

  1. 在项目资源管理器中,右键单击Modules文件夹和Insert-Module,在Module1中输入名称(或任何你想要的名称)
  2. enter image description here

    1. 在Module1中创建一个子程序,将其命名为InsertPlane(或任何名称有意义),并使用参数构建子程序,以完成需要完成的工作

      Sub InsertPlane(ByRef swApp As Object, ByVal distance As Double)
      
          'enter your code here, the parameters passed to InsertPlane can be whatever you need
          'to do what the method needs to do.
      
      End Sub
      
    2. 在宏的main()方法中,在需要时调用InsertPlane()方法

      Sub main()
      
      Set swApp = _
      Application.SldWorks
      
      Set Part = swApp.ActiveDoc
      'added code:  here I want to call the second macro and send it distance_of_second_plane, and have     it use that value
       distance_of_second_plane = 0.05
      
       'example of calling the subroutine
       boolstatus = Module1.InsertPlane(swApp, distance_of_second_plane)
      
      End Sub
      
    3. 可以导出和导入模块,因此您可以在其他宏中重复使用它们,右键单击Module1上的项目树并导出文件。同样,您可以右键单击Modules文件夹和Import modules。

    4. 希望这有帮助。

答案 1 :(得分:0)

虽然可以使用ISldWorks :: RunMacro2从另一个宏运行宏,但是不可能让此方法返回您可以在第一个宏中使用的任何值。即使这是可能的,我也不会推荐它。

您需要完成的所有工作都可以在一个宏中完成,您只需要学习如何使用SolidWorks API来实现这一目标。你能解释一下你想用宏来完成什么吗?然后我可以告诉你你需要什么代码。

请注意,宏录制器实际上不是创建任何重要宏的好工具。如果您打算认真使用SolidWorks API,那么您真的需要这三项技能:

  1. 如何使用VBA(变量,数组,条件,循环等)进行基本编程
  2. 如何浏览和阅读SolidWorks API帮助(离线版)
  3. API对象如何相互关联(SolidWorks API对象模型)
  4. 我的网站(在我的个人资料中)有一些视频可以帮助您入门。同样,如果您希望我帮助您解决当前的问题,请解释您尝试自动化的内容。