onigiri
新人さん 
オフライン
投稿: 5

I'm a llama!
|
 |
サーフェスフィルをEXCEL_VBAで実行できない
« 投稿日: 2007/04/05 - 09:00:08 » |
|
お世話になります。
下記コードの(1)に示したように、型宣言を「As Object」とすると、実行しませんでした(Errorにもならない)。 また、 Dim swModel As SldWorks.ModelDoc2 と型宣言していても、(2)において (Set swFeatMgr = swModel.FeatureManagerを経て) 'Set swFeat = swFeatMgr.InsertFillSurface2() とすると実行できませんでした。
下記コードはサーフェスフィルの対象となるEdge群を、選択状態の上で実行することを想定したSldWorks_VBA のコードです。
系統だった知識は皆無で、必要に応じてマクロ記録orヘルプサーチして適当にやってるだけの未熟者で、的外れな質問 かもしれませんが、どうかよろしくお願いいたします。
SolidWorks:2007 SP1.1 OS:Windows XP ver5.1
Dim swApp As Object '(1) '----------------------------------------------------- Dim swModel As SldWorks.ModelDoc2 '↑の型宣言では実行する '↓の型宣言では不可(この型宣言で実行できればEXCEL_VBAでも実行可と思われる) 'Dim swModel As Object '-----------------------------------------------------
Dim swSelMgr As Object, swFeatMgr As Object, swSelData As Object Dim swBody As Object, swFeat As Object, swFace As Object, swEdge As Object, swCoEdge As Object, swLoop As Object Dim vCoEdgeArr As Variant, vCoEdge As Variant, vEdgeArr As Variant, vEdge As Variant Dim bRet As Boolean, i As Long
''----------------------------------------------------- Set swApp = Application.SldWorks ''----------------------------------------------------- '' [EXCEL VBA]対応時 ''Set swApp = CreateObject("SldWorks.Application") ''----------------------------------------------------- Set swModel = swApp.ActiveDoc
Set swSelMgr = swModel.SelectionManager Set swFeatMgr = swModel.FeatureManager Set swSelData = swSelMgr.CreateSelectData
'[Variant]に格納する前にGetSelectedObject5のループでは、各々変数にあった型の配列に格納する Dim set_PatchEdge() As Object, set_vCurvatureControlType() As Long, set_vFaces() As Object, _ set_vConstraintCurves() As Object, set_CoEdge() As Object, set_swFace() As Object
Dim vPatchBoundaries As Variant, vCurvatureControlType As Variant, vFaces As Variant, vConstraintCurves As Variant
For i = 1 To swSelMgr.GetSelectedObjectCount ReDim Preserve set_PatchEdge(i - 1), set_vCurvatureControlType(i - 1), set_vFaces(i - 1), set_vConstraintCurves(i - 1) ReDim Preserve set_CoEdge(i - 1) Set set_PatchEdge(i - 1) = swSelMgr.GetSelectedObject5(i) set_vCurvatureControlType(i - 1) = 0 '0=swContact Set swEdge = swSelMgr.GetSelectedObject5(i) vCoEdge = swEdge.GetCoEdges Set set_CoEdge(i - 1) = vCoEdge(0) Next i
'[CoEdgeの配列をVariant型に格納する] vCoEdgeArr = set_CoEdge
'[初期選択Edgeに関連するFaceを取得] i = 0
For Each vCoEdge In vCoEdgeArr i = i + 1 ReDim Preserve set_swFace(i - 1) Set swCoEdge = vCoEdge Set swLoop = swCoEdge.GetLoop Set swFace = swLoop.GetFace Set set_swFace(i - 1) = swFace 'bRet = swFace.Select4(True, swSelData) Next
'[配列をVariant型に格納する] vFaces = set_swFace vPatchBoundaries = set_PatchEdge vCurvatureControlType = set_vCurvatureControlType vConstraintCurves = set_PatchEdge
'(2) '----------------------------------------------------- '4=swMergeResult Set swFeat = swModel.FeatureManager.InsertFillSurface2(3, 4, vPatchBoundaries, vCurvatureControlType, vFaces, vConstraintCurves) '↑は実行する '↓では不可 'Set swFeat = swFeatMgr.InsertFillSurface2(3, 4, vPatchBoundaries, vCurvatureControlType, vFaces, vConstraintCurves) '-----------------------------------------------------
|