Search code examples
excelvbacompiler-errorssolidworks

Compile error occurs when extracting from excel


I'm trying to use a VBA script to run a list of renders with the 3D cad program SolidWorks.
I've made a list in MS Excel Containing file names in column B with their file extensions in Column A

The render part worked but now I'm getting an error at:

   Dim xlApp As Excel.Application

The error occurring shows the message: Compile error: User-defined type not defined.

Below you can find the code:

Sub main()
Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim status As Boolean
Set swApp = Application.SldWorks
Dim i As String
Dim j As String
Dim y As Integer
Dim n As Integer
Dim m As Integer
Dim swModel As SldWorks.ModelDoc2
Dim swRayTraceRenderer As SldWorks.RayTraceRenderer
Dim swRayTraceRenderOptions As SldWorks.RayTraceRendererOptions
Dim errors As Long
Dim warnings As Long
Dim filePath As String

'i = file name
'j = file extention

'i = "bp01p0006" example
'j = "simbeton - Solidworks\bp - betonplaten\bp01 - simvlak\" example

Dim xlApp As Excel.Application
Dim xlWB As Excel.Workbook
 Set xlApp = New Excel.Application

'Set xlWB = xlApp.Workbooks.Open(“C:\Users\Omar\Desktop\Renders Rob\Lijst.xlsx”)
Set xlWB = xlApp.Workbooks.Open(“Lijst.xlsx”)

y = 0


n = 0

Do While n < 5
    If xlWB.Worksheets(1).Range("A1").offset(y, 0) = "" Then
        y = y + 1
        n = n + 1
        Else
            j = xlWB.Worksheets(1).Range("A1").offset(y, 0).Value
            i = xlWB.Worksheets(1).Range("A1").offset(y, 1).Value
            xlWB.Worksheets(1).Range("A1").offset(y, 0) = ""
            y = y + 1
    End If



   Set xlWB = Nothing
Set xlApp = Nothing


filePath = "Z:\" & j & "" & i & ".SLDPRT"
Set swModel = swApp.OpenDoc6(filePath, swDocPART, swOpenDocOptions_Silent, "", errors, warnings)

Set swApp = _
Application.SldWorks

Set Part = swApp.ActiveDoc
Dim myModelView As Object
Set myModelView = Part.ActiveView
myModelView.AddPerspective
Part.ViewZoomtofit2
Part.ViewZoomtofit2
Part.ViewZoomtofit2
Part.ViewZoomtofit2
Part.ViewZoomtofit2
Part.ShowNamedView2 "*Isometric", 7
Part.ViewZoomtofit2

Part.ViewDisplayShaded
Dim activeModelView As Object
Set activeModelView = Part.ActiveView
activeModelView.DisplayMode = swViewDisplayMode_e.swViewDisplayMode_ShadedWithEdges
Part.ClearSelection2 True
boolstatus = Part.Extension.SketchBoxSelect("0.000000", "0.000000", "0.000000", "0.000000", "0.000000", "0.000000")
Part.ViewDisplayShaded

' Access PhotoView 360
Set swRayTraceRenderer = swApp.GetRayTraceRenderer(swPhotoView)
' Get and set rendering options
Set swRayTraceRenderOptions = swRayTraceRenderer.RayTraceRendererOptions
'Get current rendering values
Debug.Print "Current rendering values"
Debug.Print "  ImageHeight          = " & swRayTraceRenderOptions.ImageHeight
Debug.Print "  ImageWidth           = " & swRayTraceRenderOptions.ImageWidth
Debug.Print "  ImageFormat          = " & swRayTraceRenderOptions.ImageFormat
Debug.Print "  PreviewRenderQuality = " & swRayTraceRenderOptions.PreviewRenderQuality
Debug.Print "  FinalRenderQuality   = " & swRayTraceRenderOptions.FinalRenderQuality
Debug.Print "  BloomEnabled         = " & swRayTraceRenderOptions.BloomEnabled
Debug.Print "  BloomThreshold       = " & swRayTraceRenderOptions.BloomThreshold
Debug.Print "  BloomRadius          = " & swRayTraceRenderOptions.BloomRadius
Debug.Print "  ContourEnabled       = " & swRayTraceRenderOptions.ContourEnabled
Debug.Print "  ShadedContour        = " & swRayTraceRenderOptions.ShadedContour
Debug.Print "  ContourLineThickness = " & swRayTraceRenderOptions.ContourLineThickness
Debug.Print "  ContourLineColor     = " & swRayTraceRenderOptions.ContourLineColor
Debug.Print " "
' Change rendering values
Debug.Print "New rendering values"
swRayTraceRenderOptions.ImageHeight = 720
Debug.Print "  ImageHeight          = " & swRayTraceRenderOptions.ImageHeight
swRayTraceRenderOptions.ImageWidth = 405
Debug.Print "  ImageWidth           = " & swRayTraceRenderOptions.ImageWidth
swRayTraceRenderOptions.ImageFormat = swImageFormat_PNG
Debug.Print "  ImageFormat          = " & swRayTraceRenderOptions.ImageFormat
swRayTraceRenderOptions.PreviewRenderQuality = swRenderQuality_Better
Debug.Print "  PreviewRenderQuality = " & swRayTraceRenderOptions.PreviewRenderQuality
swRayTraceRenderOptions.FinalRenderQuality = swRenderQuality_Best
Debug.Print "  FinalRenderQuality   = " & swRayTraceRenderOptions.FinalRenderQuality
swRayTraceRenderOptions.BloomEnabled = False
Debug.Print "  BloomEnabled         = " & swRayTraceRenderOptions.BloomEnabled
swRayTraceRenderOptions.BloomThreshold = 0
Debug.Print "  BloomThreshold       = " & swRayTraceRenderOptions.BloomThreshold
swRayTraceRenderOptions.BloomRadius = 0
Debug.Print "  BloomRadius          = " & swRayTraceRenderOptions.BloomRadius
swRayTraceRenderOptions.ContourEnabled = False
Debug.Print "  ContourEnabled       = " & swRayTraceRenderOptions.ContourEnabled
swRayTraceRenderOptions.ShadedContour = False
Debug.Print "  ShadedContour        = " & swRayTraceRenderOptions.ShadedContour
swRayTraceRenderOptions.ContourLineThickness = 0
Debug.Print "  ContourLineThickness = " & swRayTraceRenderOptions.ContourLineThickness
swRayTraceRenderOptions.ContourLineColor = 255
Debug.Print "  ContourLineColor     = " & swRayTraceRenderOptions.ContourLineColor
' Display the preview window
status = swRayTraceRenderer.DisplayPreviewWindow
' Close render
status = swRayTraceRenderer.CloseRayTraceRender
' Invoke final render window
status = swRayTraceRenderer.InvokeFinalRender
' Abort final render window
status = swRayTraceRenderer.AbortFinalRender
' Render to Windows Bitmap format
status = swRayTraceRenderer.RenderToFile("C:\Users\Omar\Desktop\Renders Rob\" & i & ".png", 0, 0)
swRayTraceRenderOptions.FinalRenderQuality = swRenderQuality_Good
' Render to HDR format (format extension omitted)
status = swRayTraceRenderer.RenderToFile("C:\Users\Omar\Desktop\Renders Rob\" & i, 0, 0)
Set swRayTraceRenderOptions = Nothing
' Close render
status = swRayTraceRenderer.CloseRayTraceRender

swApp.QuitDoc i

Loop

End Sub

Why is this happening and how can I fix it?


Solution

  • you are using "Early Binding" to Excel object model then you must be missing Excel library reference

    in your VBE editor open "References" dialog (in Excel VBE this is under Tools-> References, chances are SolidWorks VBA IDE is similar), scroll the listbox down to "Microsoft Excel XX.0 Library" ("XX" is the Excel version number) entry, check its checkbox and click OK.

    Or you may want to use "Late Binding":

    Dim xlApp As Object, xlWB As Object
    Set xlApp = CreateObject("Excel.Application")
    

    where:

    • you're not suffering from any Excel versioning issue

    • but you loose Intellisense

      so that you must know the Excel Object Model quite well in order to properly use its object and corresponding methods or properties

      but in your case you only use Open() method of Workbooks object, Range property of Worksheet object, and thus Range object Offset() method and Value property, so that you are already done.