0 Replies Latest reply on Mar 12, 2014 9:57 AM by Jens Moens

    Solidworks macro doesn't run from stand alone .exe

    Jens Moens

      Hi everyone,


      Because I haven’t found a solution on the forums, I’ve decided to post this problem here:


      As a part of my master’s thesis I want to automate a solidworks macro from outside SW. For this I have created a VB.net application (.exe). To start from, I’ve used the example macro found on this website.


      When I run this macro inside solidworks, there is no problem, everything runs as it should.
      But when I run the same macro through the stand alone .exe, SW gives an error : run-time error ‘9”, Subscript out of range ( on the namesCount-line) He doesn’t count the number of files in the assembly for some reason.


      The strange thing is, if I  start my computer, the first time I run the macro from the .exe, it works, but after that the error appears.

      Is there someone who knows the cause and hopefully a solution to this problem?



      SW-macro code:


      Sub main()

      Set swApp = Application.SldWorks

      ' Open assembly

      openFile = "C:\Program Files\SolidWorksCorp\SolidWorks\samples\tutorial\advdrawings\handle.sldasm"

      Set swModelDoc = swApp.OpenDoc6(openFile, swDocASSEMBLY, swOpenDocOptions_Silent, "", errors, warnings)

      Set swModelDocExt = swModelDoc.Extension

      ' Get Pack and Go object

      Debug.Print "Pack and Go"

      Set swPackAndGo = swModelDocExt.GetPackAndGo

      ' Get number of documents in assembly

      namesCount = swPackAndGo.GetDocumentNamesCount()


      VB.net (.exe)


      Module Module1


          Sub Main()

              Dim app As SldWorks = CreateObject("SldWorks.Application")

              Dim mySolidworks() As Process

              mySolidworks = Process.GetProcessesByName("SLDWORKS")


              If app IsNot Nothing Then

                  app.Visible = False


                  app.RunMacro("C:\source\MHT-macro.swp", "Module150214", "main")


                  'may have to kill SolidWorks

                  mySolidworks = Process.GetProcessesByName("SLDWORKS")





                  Catch ex As Exception

                  End Try

              End If


          End Sub


      End Module