Top Banner
VBA VBA VBA at a glance Lecture 6 1 Lecture 1
30

VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Apr 15, 2018

Download

Documents

hahuong
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

VBAVBA

VBA at a glanceg

Lecture 6 1Lecture 1

Page 2: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Activating VBA within SOLIDWORKS

Lecture 6 2

Page 3: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

VBA

Sub main() F ti D l tiSub main()

Di A B C D E A D bl

Function Declaration

Dim A, B, C, D, E As Double

Dim Message, Title, Default" " ' S

VBA statementMessage = "A : " ' Set prompt.Title = "InputBox" ' Set title.Default = "0.0" ' Set default.…

End Sub End of the function

Lecture 6 3

Page 4: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Data Declaration

1 N i I t L Si l D bl 1. Numeric: Integer, Long, Single, Double, Currency

Di A B C A I tDim A, B, C As Integer

2. StringDi M St A St iDim MyStr As StringMyStr = “SolidWorks”

Lecture 6 4

Page 5: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

InputBoxInputBox(prompt[, title] [, default] [, xpos] [, ypos] )p (p p [, ] [, ] [, p ] [, yp ] )

Dim Message, Title, Default

Message = "A : " Title = "InputBox" Default = "0.0" A = InputBox(Message, Title, Default)p g

Title

Message

Default

Lecture 6 5

Page 6: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

MsgBox

MsgBox(prompt[, buttons] [, title] )Dim Msg, Style, Help, Ctxt, Response, MyStringMsg = "Do you want to continue ?"g yStyle = vbYesNo + vbCritical + vbDefaultButton2Title = "MsgBox Demonstration"Response = MsgBox(Msg Style Title)Response = MsgBox(Msg, Style, Title)

MsgTitle

vbCritical

vbYesNovbDefaultButton2

Lecture 6 6

vbYesNo(highlighted)

Page 7: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

MSgBox: Style

vbOKOnly Display OK button onlyvbOKCancel Display OK and Cancel buttonsp yvbAbortRetryIgnore Display Abort, Retry, and Ignore buttonsvbYesNoCancel Display Yes, No, and Cancel buttonsvbYesNo Display Yes and No buttonsvbRetryCancel Display Retry and Cancel buttonsvbCritical Display Critical Message iconvbDefaultButton1 First button is default. vbDefaultButton2 Second button is default vbDefaultButton2 Second button is default. vbDefaultButton3 Third button is default. vbDefaultButton4 Fourth button is default.

Lecture 6 7

Page 8: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

MsgBoxDisplay numeric value Display numeric value

Dim A As DoubleA = 10 5A = 10.5Dim Msg, Style, Title, ResponseMsg = AStyle = vbOKOnlySty e bO O yTitle = “Output "Response = MsgBox(Msg, Style, Title)

Lecture 6 8

Page 9: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Arithmetic

Numeric+ Add 5+5 10- Subtract 10-5 5- Subtract 10-5 5/ Divide 25/5 5\ Integer Division 20\3 6* Multiply 5*4 20^ Exponent (power of) 3^3 27Mod Remainder of division 20 Mod 6 2

StringString& String concatenation "G"&" "&"B" “ “G B“+ String concatenation “A” + “B” “AB”

Lecture 6 9

Page 10: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Mathematical ExamplesConverting radian to degree

pi = 4 * atn(1.0)deg = rad * 180.0 / pi⎟⎟

⎞⎜⎜⎝

⎛=

pirad 180deg

Converting radian to degree

deg ad 80 0 / p⎠⎝ pi

Sub main()DIM deg, rad, pi AS DOUBLEDIM deg, rad, pi AS DOUBLE* … input the radpi = 4 * atn(1.0)deg = rad * 180.0 / pideg rad 180.0 / pi* … display the result

End Sub

Lecture 6 10

Page 11: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Mathematical ExamplesConverting degree to rad

pi = 4 * atn(1.0)rad = deg * pi / 180

⎟⎠⎞

⎜⎝⎛=180

deg pirad

Converting degree to rad

ad deg p / 80⎠⎝180

Length calculation

22 yxl +=

g

l = sqr ( x^2 + y^2)

Lecture 6 11

Page 12: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Mathematical ExamplesQuadratic Equation

par1 = sqr ( b^2 – 4 * a * c )x1 = (-b + par1)/(2 * a)

Quadratic Equation

ac4bbxx2 −±−

= x1 ( b + par1)/(2 a)x2 = (-b - par1)/(2 * a)a2

x,x 21 =

Note:Equations can written using one

l lequation or using multiple equations (depends on individual)

Lecture 6 12

Page 13: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Mathematical Operators : ++ : can be applied to string and number+ : can be applied to string and number.

Dim A, B As DOUBLEA = 2B = 3C A + B C 23 (C “2” + “3”)C = A + B C =23 (C = “2” + “3”)

Therefore, Val is used to convert to numerical o , a u d o o o u avalue

C = Val(A) + Val(B) C = 5

Lecture 6 13

Page 14: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Function: with returned value Sub main()Sub main()

Dim length As Doublelength = Hypotenuse(3, 4) ‘Interfacing the functionMsgBox "Length is " & lengthMsgBox Length is & length

End Sub

‘Function Declaration As Double: return Double valueFunction Declaration As Double: return Double valueFunction Hypotenuse(A As Double, B As Double) As DoubleHypotenuse = Sqr(A ^ 2 + B ^ 2)End FunctionEnd Function

Lecture 6 14

Page 15: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Function: with no returned value Sub main()Sub main()

Dim firstfirst = subr1()

End Sub

‘No As Double or Integer : will not return any valueFunction subr1()

Dim Msg, Style, Title, ResponseMsg = AStyle = vbOKOnlyTitle = "First subr"Title = "First subr"Response = MsgBox(Msg, Style, Title)

End Function

Lecture 6 15

End Function

Page 16: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Tips to write good programWrite short source codeWrite short source codeShort source code is easy to comprehend.Main function will the manage the sub function

Sub Main()func1()func2()…

End Sub

Function func1()…End Function

Lecture 6 16

Page 17: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Tips to write good programWrite noteWrite note‘ : use to write the remark.

‘Function DeclarationFunction Hypotenuse(A As Double, B As Double) As

Double…Hypotenuse = Sqr(A ^ 2 + B ^ 2)

End FunctionEnd Function

Lecture 6 17

Page 18: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Tips to write good programUse tab to differentiate between segmentsUse tab to differentiate between segments

Sub Main()Dim A As Double…If rad < 0 Then

rad = ……Else If a < 0 Then

dim ……

End IfEnd Sub

Lecture 6 18

Page 19: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Tips to write good program

Use global declaration for variables and Use global declaration for variables and constant

Dim pi As Double

Sub Main()pi = 4 * atn(1.0)

End Sub

Lecture 6 19

Page 20: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Task

C l l t th di t f Calculate the coordinates of a inscribed hexagon based on the radius of the circle radius of the circle.

Lecture 6 20

Page 21: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Procedure1. Input the radius of the circle1. Input the radius of the circle

2. Calculate all the vertices

Point x Rad* cos(ang)Point.x = Rad* cos(ang)Point.y = Rad* sin(ang)

h i 0o 60o 120o 180o 240o 300owhere ang is 0o, 60o, 120o, 180o, 240o,300o

Lecture 6 21

Page 22: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Programming: Step 1

i i lDim Message, TitleDim Default, Rad As Double

Message = “Radius of the circle " Titl "I tB "Title = "InputBox" Default = “10.0" Rad = InputBox(Message Title Default)Rad = InputBox(Message, Title, Default)

Lecture 6 22

Page 23: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Programming: Step 2Note: ang is radian, therefore the ang in cos function is radian.Note: ang is radian, therefore the ang in cos function is radian.

Dim pi, p1x, p1y, p2x, p2y As Double

i 4 * At (1)pi = 4 * Atn(1)

p1x = Radp1y = 0

p2x = Rad * Cos(pi / 3)p2y = Rad * Sin(pi / 3)…

p6x = Rad * Cos(5*pi / 3)p6y = Rad * Sin(5*pi / 3)

Lecture 6 23

Page 24: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Programming: Step 3Verifying the program by displaying and checking Verifying the program, by displaying and checking the answer with known radis

Possible amendment: round-off error when rad = 10.0p2x = 5 p

p2x = Round(Rad * Cos(pi / 3), 2)

Lecture 6 24

Page 25: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Integration with SolidWorksEasiest method to write VBA for Solidworks is to Easiest method to write VBA for Solidworks is to record the process of modeling.

Tool Macro Record or Icon

Lecture 6 25

Page 26: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Macro for line drawing

1 S t th k t h l1. Set the sketch plane2. Set the macro to record3. Draw the line (single line)4. Stop the recording5. Save the macro6. View the macro6. View the macro

Lecture 6 26

Page 27: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

' ***************************************************** ' C:\DOCUME~1\use\LOCALS~1\Temp\swx2956\Macro1.swb - macro recorded on 02/22/09 by use' *****************************************************Dim swApp As ObjectDim swApp As ObjectDim Part As ObjectDim SelMgr As ObjectDim boolstatus As BooleanDim longstatus As Long, longwarnings As LongDim longstatus As Long, longwarnings As LongDim Feature As ObjectSub main()

Set swApp = Application.SldWorksSet swApp Application.SldWorksSet Part = swApp.ActiveDoc

Part.CreateLine2 -0.0445163235549, 0.08583865080093, 0, 0.07046754356449, -0.05908893171413, 0

Lecture 6 27

0.07046754356449, 0.05908893171413, 0

End Sub

Page 28: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Createline2 Functionretval = ModelDoc2 CreateLine2 ( p1x p1y p1z p2x p2y retval = ModelDoc2.CreateLine2 ( p1x, p1y, p1z, p2x, p2y,

p2z)

Input:Input:(double )p1x X value of the line start point(double) p1y Y value of the line start point(double) p1z Z value of the line start point( ) p p(double) p2x X value of the line end point(double) p2y Y value of the line end point(double) p2z Z value of the line end pointReturn:(LPDISPATCH) retval Pointer to a Dispatch object, if the

operation fails, then NULL is returned

Lecture 6 28

Page 29: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Sub main()Set swApp = Application.SldWorksSet Part = swApp.ActiveDoc

‘Conversion from the macro created

p1x = p1y =

Part.CreateLine2 p1x, p1y, 0, p2x, p2y, 0

Or

Dim line1 As ObjectSet line1 = Part.CreateLine2 (p1x, p1y, 0, p2x, p2y, 0)

End Sub

Lecture 6 29

Page 30: VBA1 Introduction to VBA programming.pptjamalt/sme4513/VBA1 Introduction to... · Programming: Step 1 Diilim Message, ... Easiest method to write VBA for Solidworks is to ... VBA1

Task 2

W it t t th h Write a program to create the hexagon based on user input radius?

Lecture 6 30