2016-11-26 9 views
1

3D CADプログラムSolidWorksでレンダリングのリストを実行するためにVBAスクリプトを使用しようとしています。
私は、レンダリングの部分が働いていたが、今私がエラーを取得していますExcelからの抽出時にコンパイルエラーが発生する

欄にそのファイルの拡張子を持つ列B内のファイル名を含むMS 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]が必要です。あなたのコードは最小限ではありません。質問を編集して(あなたの質問で問題を再現するために必要なコードのみ)、完全(ユーザは問題を再現するために何も必要ありません)、および検証可能であることを確認してくださいあなたが直面している正確な問題)。あなたの質問はスタックオーバーフローのトピック外です。これは一般的な[downvoteの理由](http://idownvotedyoubecause.com/so/TooMuchCode)でもあることに注意してください。 –

答えて

2

は、あなたがこのツール - 下>参照は、チャンスがされているエクセルVBEであなたのVBEエディタ開い「参照」ダイアログ(でExcelライブラリリファレンス

が欠落しなければならないExcelオブジェクトモデルへの「早期バインディング」 SolidWorks VBA IDEも同様です)、リストボックスを「Microsoft Excel XX.0 Library」(「XX」はExcelバージョン番号)の項目までスクロールし、そのチェックボックスをオンにして「OK」をクリックします。

それとも、 "レイトバインディング" を使用することもできます。

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

場所:あなたは、任意のエクセルversioning問題に苦しんでいない

  • が、あなた緩いインテリセンス

    あなたが唯一WorkbooksオブジェクトのOpen()方法、WorksheetオブジェクトのRange性質、ひいてはRangeを使用し、適切にそのオブジェクトと対応するメソッドやプロパティ

    を使用するためではなく、あなたのケースで非常によく、Excelのオブジェクトモデルを知っている必要がありますようにオブジェクトOffset()メソッドとValueプロパティを使用すると、すでに完了していることになります。

+0

ようこそ。私の答えがあなたの質問を解決したなら、それを合格とマークしてください。ありがとうございました! – user3598756

+0

お返事ありがとうございました! 私はあなたの最初のsollution(Excelのリバースリファレンス1)を試しました! ただし、Excelファイルを開こうとする部分に2番目のエラーが発生しました この行に「オブジェクトが再入荷されました」と表示されます exelファイルの拡張子を追加する必要はありますか?(私がインターネット上で見つけたコードでは) これを試してみると、線は赤くなり、Cの直後のダブルドット ":"でエラーが発生する xlWB = xlApp.Workbooks.Openを設定する( "C:\ Users \ Omar \ Desktop \ Renders Rob \ Lijst.xlsx") それはリストセパレータを期待していると言います) 親切にお礼を申し上げます。 – Cornelis

+0

ありがとう!あなたがこの最後の部分で私を助けることができるなら、私は確かに、いいだろうか? – Cornelis

関連する問題