2016-11-26 5 views
1

Ich versuche, ein VBA-Skript zu verwenden, um eine Liste von Renderings mit dem 3D-CAD-Programm SolidWorks auszuführen.Kompilierfehler beim Extrahieren von Excel

Dim xlApp As Excel.Application 

The:
Ich habe eine Liste in MS Excel mit einem Gehalt von Dateinamen in Spalte B mit ihren Dateierweiterungen in Spalte A Ich bin immer bei

Der Render Teil gearbeitet, aber jetzt einen Fehler gemacht Fehler auftritt, erscheint die Meldung: Compile error: User-defined type not defined.

Im Folgenden finden Sie den Code finden:

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 

Warum geschieht dies ein Und wie kann ich das reparieren?

+0

Fehlersuche Hilfe Fragen erfordern eine [mcve] wie in der [Hilfe]. Dein Code ist nicht minimal. Bitte bearbeiten Sie Ihre Frage, um sicherzustellen, dass Ihr Code Minimal ist (nur der Code, der für die Reproduktion Ihres Problems in Ihrer Frage benötigt wird), Vollständig (Benutzer brauchen nichts anderes, um Ihr Problem zu reproduzieren) und Verifizierbar (der mitgelieferte Code reproduziert) das genaue Problem, dem Sie gegenüberstehen). Wie es Ihre Frage ist, ist Off-Topic für Stack Overflow. Beachten Sie, dass dies auch ein häufiger Grund ist (http://idownvotedyoubecause.com/so/TooMuchCode). –

Antwort

2

Sie verwenden "Early Binding" zu Excel-Objektmodell dann müssen Sie Excel-Bibliothek Referenz

in Ihrem VBE-Editor fehlt offen "References" Dialog (in Excel VBE wird dies unter Tools-> Referenzen, die Chancen sind, SolidWorks VBA IDE ist ähnlich), blättern Sie in der Listbox nach unten zu "Microsoft Excel XX.0 Library" ("XX" ist die Excel-Versionsnummer), markieren Sie das Kontrollkästchen und klicken Sie auf OK.

Oder Sie können "Late Binding" verwenden möchten:

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

wo:

  • Sie leiden nicht aus einer Excel versioning Ausgabe

  • aber Sie verlieren Intellisense

    so, dass Sie das Excel-Objektmodell ganz gut, um richtig seine Objekt zu verwenden und entsprechende Methoden oder Eigenschaften

    aber in Ihrem Fall, dass Sie nur verwenden Open() Methode von Workbooks Objekt, Range Eigenschaft Worksheet Objekt und damit Range wissen müssen Objekt Offset() Methode und Value Eigentum, so dass Sie bereits fertig sind.

+0

Gern geschehen. Wenn meine Antwort Ihre Frage gelöst hat, markieren Sie sie als akzeptiert. Vielen Dank! – user3598756

+0

danke für deine schnelle antwort! Ich habe versucht Ihre erste Lösung (die Excel-Referenz livrary) es hat funktioniert! Aber jetzt ist ein zweiter Fehler bei dem Teil aufgetreten, wo ich versuche, die Excel-Datei zu öffnen es sagt "Objekt Requiered" an dieser Zeile Muss ich die EXEL-Datei Erweiterung hinzufügen?(weil in Codes, die ich im Internet fand, ty did'nt) Wenn ich dies versuche, die Zeile turs rot und gibt einen Fehler bei ":" der Doppelpunkt direkt nach der C Set xlWB = xlApp.Workbooks.Open ("C: \ Benutzer \ Omar \ Desktop \ Rendert Rob \ Lijst.xlsx") es sagt, dass es ein Listentrennzeichen erwartet) Mit freundlichen Grüßen und danke für Ihre Hilfe bis jetzt! – Cornelis

+0

danke! ich bin mir sicher, wäre es schön, wenn du mir auch bei diesem letzten Teil helfen könntest? – Cornelis

Verwandte Themen