0

在 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/140033,http : //www.cadsharp.com/macros/run-macro-from-another-macro-vba/运行其他的 VBA 模块modules ,从 VBA 中的不同模块调用子例程

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

4

2 回答 2

1

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

因此,例如在您的 Macro1 中:

  1. 在项目资源管理器中,右键单击 Modules 文件夹和 Insert-Module,在 Module1 中命名(或任何您想要的名称)

在此处输入图像描述

  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 文件夹并导入模块。

希望这可以帮助。

于 2014-08-25T21:54:14.153 回答
0

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

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

另请注意,宏记录器确实不是创建任何重要宏的好工具。如果您打算认真使用 SolidWorks API,那么您确实需要掌握以下三项技能:

  1. 如何使用 VBA 进行基本编程(变量、数组、条件、循环等)
  2. 如何浏览和阅读 SolidWorks API 帮助(离线版)
  3. API 对象如何相互关联(SolidWorks API 对象模型)

我的网站(在我的个人资料中)有一些视频可以帮助您入门。同样,如果您希望我在这里帮助您解决当前的问题,请解释您要自动化的内容。

于 2014-09-20T04:06:26.980 回答