2016-11-26 3 views
1

Я пытаюсь использовать скрипт VBA для запуска списка рендеринга с программой 3D-CAD SolidWorks.
Я сделал список в MS Excel, содержащих имена файлов в столбце B с их расширениями в колонке АОшибка компиляции возникает при извлечении из excel

рендер часть работала, но теперь я получаю сообщение об ошибке по адресу:

Dim xlApp As Excel.Application 

ошибка, произошедшая показывает сообщение: Compile error: User-defined type not defined.

Ниже вы можете найти код:

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 

Почему это происходит Как я могу это исправить?

+0

Отладочные справки требуют [mcve] согласно [help]. Ваш код не минимален. Пожалуйста, отредактируйте свой вопрос, чтобы убедиться, что ваш код минимален (только код, необходимый для воспроизведения вашей проблемы в вашем вопросе), Complete (пользователям не нужно ничего другого, чтобы воспроизвести вашу проблему) и Подтверждаемый (предоставленный код воспроизводит точная проблема, с которой вы сталкиваетесь). Поскольку это ваш вопрос вне темы для переполнения стека. Обратите внимание, что это также общая причина [downvote] (http://idownvotedyoubecause.com/so/TooMuchCode). –

ответ

2

вы используете «Early Binding» в объектной модели Excel, то вы должны быть пропущены Excel библиотека ссылки

в редакторе VBE открытым «Ссылки» диалогового (в Excel VBE это под Tools-> References, шансы SolidWorks VBA IDE аналогична), прокрутите список до «Microsoft Excel XX.0 Library» («XX» - это номер версии Excel), установите флажок и нажмите «ОК».

Или вы можете использовать "Late Binding":

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

где:

  • вы не страдаете от любого versioning вопроса Excel

  • но вы теряете Intellisense

    , так что вы должны знать объектную модель Excel достаточно хорошо для того, чтобы правильно использовать его объект и соответствующие методы или свойство

    , но в вашем случае, если вы используете только Open() метод Workbooks объекта, Range свойства Worksheet объекта, и, таким образом, Range объект Offset() метод и Value собственность, так что вы уже сделали.

+0

Добро пожаловать. Если мой ответ решит ваш вопрос, отметьте его как принятый. Спасибо! – user3598756

+0

спасибо за ваш быстрый ответ! Я попробовал свое первое решение (Excel), это сработало! Но теперь вторая ошибка возникла в той части, где я пытаюсь открыть файл excel. 0: Мне нужно добавить расширение exel-файла?(потому что в кодах я нашел в Интернете tey did'nt) Когда я пытаюсь это сделать, линия тускнет красным цветом и дает ошибку при «:» двойной точке сразу после C Установите xlWB = xlApp.Workbooks.Open («C: \ Users \ Omar \ Desktop \ Renders Rob \ Lijst.xlsx») говорит, что он ожидал разделителя списков) доброжелательно и благодарю за помощь! – Cornelis

+0

спасибо! я уверен, было бы хорошо, если бы вы могли помочь мне с этой последней частью? – Cornelis

Смежные вопросы