Solidworks Macro - Open new Part document
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.