This document discusses automating SolidWorks with Excel using Visual Basic for Applications (VBA). It covers creating user interfaces in Excel, accessing SolidWorks through VBA code, and driving SolidWorks automatically using loops in Excel. Examples are provided on building SolidWorks VBA code that can be used in Excel macros, including connecting to SolidWorks, accessing Excel data from VBA, and driving SolidWorks models with Excel values and information. Attendees are encouraged to ask questions during or after the presentation.
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Automating SolidWorks with Excel
1. Automating SolidWorks with Excel Robert Mengel, Design Automation Consultant Paul Gimbel, Business Process Sherpa Razorleaf Corporation
2. Not Sure If You Should Stay or Go To “Redneck Workarounds?” We will cover: Creating fast, robust, and FREE user interfaces for SolidWorks automation Accessing Visual Basic for Applications (VBA) through Excel Connecting Excel to SolidWorks through VBA Building SolidWorks VBA code for use in Excel Accessing Excel references through VBA Driving SolidWorks automatically and bulk processing with loops *We know that VBA is not truly object-oriented, but for those that would choose Excel as a programming environment over Visual Studio 2010, it’s close enough.
3. DISCLAIMER!!! More information is available There is so much that you can do with this stuff!! We wanted to spend adequate time and detail on what we do cover. Everything is documented in the PowerPoint Download it from the SolidWorks World Site Download it from the Razorleaf Site (link on the handout) Give me a business card and I’ll email it to you Read the Presenter Notes Come on up after the session with any questions Take our business cards...take a few and hand them around Check out some of our other presentations on these and other topics www.razorleaf.com or www.slideshare.net
4. BACKGROUND Razorleaf Corporation SolidWorks Service Partner Services ONLY (we’re not trying to sell you any products, we’re neutral) Data Management (EPDM, Enovia, SmarTeam, Aras, V6, MatrixOne) Design Automation (DriveWorks, Tacton, Custom Programmed API) Workflow Automation (Microsoft SharePoint and Tools) Bob Mengel Mechanical Engineer and Automation Developer/Implementer Paul Gimbel (aka “The Sherpa”) Mechanical Engineer, SolidWorks Demojock, Automation Implementer All Razorleaf presentations will be available at www.razorleaf.com and on www.slideshare.net
5. Your Options Pure SolidWorks functionality SolidWorks Macros Microsoft Excel (and some VBA, of course) Maximized use of Excel and VBA Custom developed application Commercially available solution partner product AutoDesk Inven…nah, who are we kidding.
7. What Do You Mean SolidWorks Has Limitations!?!? All of these functions require interaction with the user SolidWorks is required Great for your reseller, not so great for your budget Puts non-engineers in an uncomfortable environment Requires at least some SolidWorks training Do you really want a salesperson opening your models!?!? Data management issues One file with tons of configurations? How big is that file, eh? Multiple people can not edit one file at the same time Multiple people can potentially crush your carefully constructed model Revision questions Save As Copy every time? What about updates?
8. SolidWorks Macros Run completely inside of SolidWorks Requires SolidWorks licenses for all involved May not be the best environment for all users Anything that’s not in SolidWorks has to be coded Designed to drive the SolidWorks User Interface Not all that automation-friendly OK to use for small functions Some 5 or 6 step operation that you want to hotkey Can be tough to share due to peoples individual settings VSTA (.NET) macros require some programmatic acumen
9. The Road To Excel Design Tables alone don’t address User Interface Input values as opposed to output values Advanced Excel functionality Leverage Excel Use Excel User Interface tools Add-Ins (Analysis Pack, Solver, etc.) Data validation User Defined Functions Macros
10. Excel and SolidWorks – So Happy Together Three Methods To Integrate SolidWorks and Excel Design Table Embedded in the SolidWorks model Must edit through SolidWorks Edit Table In New Window to gain access to Excel MUST BE IN THE DESIGN TABLE SHEET WHEN YOU EXIT!! External Spreadsheet with Macro to drive SolidWorks Requires SolidWorks API programming Separates workbook from SolidWorks model Does not require SolidWorks (until macro is run) Shareable (through Excel Share Workbook functionality) Can be used to drive multiple SolidWorks files Can be used to drive other things as well, not just SW Spreadsheet with Macro Inserted as OLE Object
11. What Excel Brings To The Party (a six pack?) User Interfaces Powerful and flexible formatting Charts and support for graphics Dynamic tools to help user inputs and selections Advanced equation functionality VBA Custom functions Macros Object-Oriented Programming (well, sort of)
12. Just A Little Bit Of Work Makes A Huge Difference Some People’s Idea of an Excel User Interface Less Than Twenty Minutes Of Work
37. Calculations in Excel Name Your Cells and Ranges Just as in SolidWorks, it makes equations easier to read Add Comments In adjoining cells or with the comment tool Keep your formulas simple whenever possible Multiple calculation steps are easier to troubleshoot Intelligent Layouts Don’t scatter stuff all over the place Consider cells that may need to be adjacent for lookups, etc. Give this collection of cells a single name
38. 2.9 Searches until it finds a value that is “greater than” the search value, then goes back to take the previous one. Working with Ranges in Excel Index: Return the value at row n, column m Match: Which row is this value in? Specify which order values are in (asc/desc) or exact matches Combine with Index to do a lookup on any column VLookup/HLookup: Find value in first column/row RangeLookup = FALSE: “No, I only want exact matches” RangeLookup = TRUE: “Yes, find me the closest match” VLookup(110,VoltageRange,2,FALSE) = 1.73 VLookup(290,VoltageRange,2,FALSE) = #N/A VLookup(359,VoltageRange,2,TRUE) =
39. Dealing With Unknown Quantities Count/CountA: Count the numbers/non-blanks in the range? CountIf: How many in the range meet the criteria? Columns/Rows: How many columns/rows are in the range? DGet: Return any value in a range based on criteria Range “Holes” DGet(Holes,”Dia”,Criteria1) = 0.250 DGet(Holes,”Number”,Criteria2) = 2 DGet(Holes,”Number”,Criteria3) = #NUM! DGet(Holes,”Dia”,Criteria4) = #VALUE! Criteria1Criteria2 Criteria3 Criteria 4
46. OK, Enough Easy Stuff…On To The VBA Use VBA to AUGMENT Excel Custom functions Macros Connections to other programs (like SolidWorks) Do As Much As You Can In Excel Easier to troubleshoot Easier to maintain Faster to develop
47. Accessing VBA Run or edit a macro from a list Enter the Visual Basic for Applications Development Environment
48. Where to Stick your Code You can place code in any worksheet It’s best to create your own module You can just think of a module as a code folder
50. Custom Functions – Repetitive Calculations Tired of typing in the same equations? Public Function CylVolume(RadiusAs Double, Height As Double) As Double DimPiAs Double Pi = 4 * Atn(1) ‘ArcTangent of 1 = pi/4…I think CylVolume = Pi * Radius * Raidus * Height End Function Now you can just use: = CylVolume(Radius, Height) or =CylVolume($B$4, C5) (if you haven’t been paying attention and you don’t know that you’re supposed to name your cell ranges)
51. Custom Functions – Fill in Excel Gaps Excel missing a function you want? No problem! Public Function Divisible(Value As Double, Divisor As Double) As Boolean Dim Compare As Integer Compare = CInt(Value / Divisor) If Compare = (Value / Divisor) Then Divisible = True Else Divisible = False End If End Function Now all I do is put THIS in my cell: =If(Divisible(Length,StdSpacing),Length / StdSpacing,0) Note: Because we’re converting a Double to an Integer, this only works for numbers up to 32767. This was not an issue in my application as the model only supported up to 48”. But you may want to put a check in there so you don’t get overflow errors.
52. Custom Functions - Conversions What about converting units or data types? (or both!) Public Function FeetInches(TotalInchesAs Double) As String Dim Feet As Integer Dim Inches As Double Feet = Application.WorksheetFunction.RoundDown(TotalInches / 12,0) FeetInches = Feet & “’ “ Inches = (TotalInches – (Feet * 12)) If Inches > 0 Then FeetInches = FeetInches & “- “ & Inches & chr(34) ’(34 is ASCII for “) End If End Function Now you can use the equation: =“LENGTH = “ & FeetInches(Length) To get: LENGTH = 4’ – 6.125” The example in your handout actually picks up on increments of 1/32”
53. How To Program In VBA The Ultimate Process For Non-Programmers: Determine what you want your program/code snippet to do Think of some “keywords” to describe it (if you know the functions you need to use, you’re ahead of the game) http://www.google.com(add “VBA” and/or “Excel” to search) Ctrl-C Ctrl-V Tweak Also check out www.krugle.org Also look to Excel VBA and SW API Help files. They’re actually helpful. I know! I was shocked, too.
55. Connecting to SolidWorks Add the SolidWorks library to your project Tools, Macros, Visual Basic Editor Tools> References> SldWorks 2011 Type Library Now you have SW Intellisense Define your SolidWorks App Dim swApp As SldWorks.SldWorks Establish a SolidWorks object Attaches to an existing session Launches SW if it is not open Set swApp = CreateObject("SldWorks.Application") swApp.Visible = True
59. Getting Around In Excel With VBA To access a named cell (you named them all, right!!?!?) Thickness = Range(“TestCell”).Value Running through the cells in a named range Dim MyCell As Excel.Range‘Even a single cell is treated as a range For Each MyCell in Range(“TestRange”) Total = Total + MyCell.Value Next MyCell‘Looping through the TestRange What if you have rows (i.e. a multi-column range)? Dim MyRow As Excel.Range‘We’re going to cycle through the rows For Each MyRow in Range(“TestRange”).Rows Total = Total + MyRow.Cells(1,3).Value ‘Row 1, Column 3 of the range Next MyRow‘Looping through the TestRange
60. Absolute Row and Column References Can I just put in Row and Column references, like: Thickness = Worksheets(“Sheet1”).Range(“A1:A1”).Value Thickness = Worksheets(“Sheet1”).Cells(4,9).Value Sure, but I would have to slap you silly Readability…Minus 10 style points What if the range moves…Minus 10 style points Debugging…Minus 10 style points Scalability…Minus 10 style points Portability…Minus 10 style points Chances of anyone else understanding your code…Minus 30!
64. The Autotest Tool – What It Does Enter model information at the top Fill in column 1 with test case names Fill in row 1 of the table with parameter and result names Choose types in row 3 Fill in values Push the button Sit back Be amazed Go get some coffee Be amazed some more Call a supplier Be more amazed (and a bit tired) Use Excel to chart your results
67. Wrapper Functions, Not RAPPER Functions Wrapper – A custom-designed function used to execute an API call Why use wrappers? Easier to read main code Easier to reuse (in the same project) code Easier to repurpose code (other projects) More control Build error-trapping right into the calls
68. Object-Oriented Programming (or some facsimile thereof) One of the hardest, most confusing concepts in programming (Or so I’m told) Class – A definition of something like a window or bolt Property – A parameter value that an object has Method – Something that an object can do Collection – A bunch of objects, like an array, just of objects Dot (.) – Something you will type a lot of Separates an object from its property or method Ex. Bolt.Length or Window.Pane.item(“top”).Glass.Thickness Instantiate – To make a real thing as defined by a class Ex. Upper Flange Bolt #3 or Kitchen Window Over Sink Those are then called “instances” and “objects” Everything in OOP and the SolidWorks API, is performed ON or BY an object.
73. Still Open For Questions!!! PLEASE!! Let’s see if they really read the evaluation forms… In the comments section, after your comments………everyone write… “Where did he find a USB arc welder? I want one.” For the complete version of the presentation, including presenter notes, full code and models, visit www.razorleaf.com after the show! Yes, it’s free.