Solidworks Macro - Open new Part document

5 minute read

As the title suggested, in this post, we open new document from Solidworks VBA macros.

Also we understand each and every line of written code. So that you can understand why we written those lines and get some knowledge about how to write macro properly.

Please see below video for visual details.

To do this, we first need to create a new empty macro. If you don’t know how to create an empty macro; then please go to this VBA in Solidworks post.

After creating an empty macro, you need to copy paste below code into this empty macro.

Option Explicit

' Creating variable for Solidworks application
Dim swApp As SldWorks.SldWorks
' Creating variable for Solidworks document
Dim swDoc As SldWorks.ModelDoc2

' Main function of our VBA program
Sub main()

    ' Setting Solidworks variable to Solidworks application
    Set swApp = Application.SldWorks
    
    ' Creating string type variable for storing default part location
    Dim defaultTemplate As String
    ' Setting value of this string type variable to "Default part template"
    defaultTemplate = swApp.GetUserPreferenceStringValue(swUserPreferenceStringValue_e.swDefaultTemplatePart)

    ' Setting Solidworks document to new part document
    Set swDoc = swApp.NewDocument(defaultTemplate, 0, 0, 0)

End Sub

This code opens a new default part template in Solidworks.

Now let us walk through each line in the above code, and understand the meaning of every line.

Option Explicit

This line forces us to define every variable we are going to use.

This is very important because if you don’t declare above line, it is very difficult to caught typo errors in variable names.

This type of error comes, when you mistakenly type wrong spelling of your defined variable.

In this case, VBE thinks that you have defined a new variable and use this variable.

This causes issues because your program runs perfectly but you didn’t get the desired result.

This most of the time discourage people and ultimately they left the programming.

So be on safe side and use this Option Explicit line in your every module.

' Creating variable for Solidworks application
Dim swApp As SldWorks.SldWorks
' Creating variable for Solidworks document
Dim swDoc As SldWorks.ModelDoc2

As the comments in above code sample shows, in these 2 lines we are creating variables of different type.

' Creating variable for Solidworks application
Dim swApp As SldWorks.SldWorks

In this line, we are creating a variable which we named as swApp and the type of this swApp variable is SldWorks.SldWorks.

If we omit 1 SldWorks, then our VBE show error if we try to run this macro.

' Creating variable for Solidworks document
Dim swDoc As SldWorks.ModelDoc2

In this line, we are creating a variable which we named as swDoc and the type of this swDoc variable is SldWorks.ModelDoc2.

Here, if we omit SldWorks, the compiler won’t give error. I used it to know who is the parent object.

ModelDoc2 is the a object, which holds properties and methods related to this a document.

These methods and properties are common to part, assembly and drawing documents.

You can see more about ModelDoc2 in this help link.

Next is our Sub procedure named main. This procedure hold all the statements (instructions) we give to computer.

' Setting Solidworks variable to Solidworks application
Set swApp = Application.SldWorks

In this line, we are setting the value of our Solidworks variable which we define earlier to Solidworks application.

Now it important to know that when you defined a variable of different type, which is not a common type, then you need to set the variable also.

This is a standard way to set Solidworks application. This way is given in many Solidworks API VBA example.

' Creating string type variable for storing default part location
Dim defaultTemplate As String
' Setting value of this string type variable to "Default part template"
defaultTemplate = swApp.GetUserPreferenceStringValue(swUserPreferenceStringValue_e.swDefaultTemplatePart)

In 1st statement of above example, we are defining a variable of string type and named it as defaultTemplate.

This variable defaultTemplate, hold the location the location of Default Part Template.

In 2nd line of above example. we assign value to our newly define defaultTemplate variable.

We assign the value by using a Method named GetUserPreferenceStringValue(). This method is a part of our main Solidworks variable swApp.

To access this method, we need to write swApp variable and then use a “.” to access the Public properties and Methods inside this variable.

This “.” is called Dot operator. This operator provides us the access to the Public properties and Methods inside an object.

When you type after a “.” you will notice that Visual Basic Editor automatically provides a list of properties and methods inside this swApp object. This helps us to write correct name for these methods and properties.

Now we get the function GetUserPreferenceStringValue(). But this function needs some input to work with. This inputs are generally called Parameters.

In programming voculabury, we need to pass the parameter to this function so that this function can worked.

This input parameter is a single value from a list of other values. This list is stored in swUserPreferenceStringValue_e object.

In Solidworks API, if anything has _e after it, it means that this object contains some type of lists. It is important to know because we frequently use these type of lists. They are called enum. The value they hold is called Constant.

So our function GetUserPreferenceStringValue() needs some constant value from swUserPreferenceStringValue_e enum list to work.

Since we want Default part template, we use swDefaultTemplatePart constant value from the swUserPreferenceStringValue_e enum list.

Please note that there are lots of values inside this enum list. You can see these values from this link].

Now we just need to set the value of our swDoc variable to new document. We set the value as shown in below code snippet.

' Setting Solidworks document to new part document
Set swDoc = swApp.NewDocument(defaultTemplate, 0, 0, 0)

To set the value of swDoc, we use NewDocument() method. This method is inside swApp, hence we first need to invoke swApp and then by using Dot operator we access the NewDocument() method.

Now this method needs 4 parameters (or input values) to work. If we don’t provide any of these required value we get errors.

These 4 parameters are as follows:

  • TemplateName

    • This can be a full path of the template, which we use to create New document.
  • PaperSize

    • Size of paper
  • Width

    • Width of paper
  • Height

    • Height of paper

When successfully implemented, this method creates a new document.

If this method failes to create a new document in that case this return NULL value. We can use this NULL value to check if the operation is successfull or not.

In our example, we use defaultTemplate variable as TemplateName parameter and use 0 in all other 3 parameter.

Please note that PaperSize, Width and Height is used only if we want to create a new Drawing document.

This is all for now. This post is getting too long.

In next post I will tell you how to create a new Assembly document and new Drawing document.

Updated: