仕事のカタマリにようこそ!  [ ログイン | ユーザ登録 ]
フォーラムから検索

機械用3D-CAD SolidWorks非公認のユーザサイトです
 
 
Web katamari.org
仕事のカタマリ
ホーム リンク集 ダウンロード フォーラム(掲示板) FAQ お問い合わせ









フォーラムニュース: 質問、相談カテゴリに「SolidWorks操作方法」に関するフォーラムを追加しました。(2003/11/27)
いらっしゃい、 ゲストさん. まずはこちら→ ログイン または 登録. 2025/07/03 - 16:39:39
ホーム ヘルプ 検索 ログイン 登録

仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: サーフェスフィルをEXCEL_VBAで実行できない 前のトピック 次のトピック
ページ: [1] Page Bottom 返信 返信のお知らせ Print 
   著者  トピック: サーフェスフィルをEXCEL_VBAで実行できない  (閲覧数 2841 回)
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)
'-----------------------------------------------------
議長に報告する   記録済み
hisa
カタマリの王様!?
*****

オフライン

投稿: 507



PANDA-Z!!

プロファイルを見る WWW
Re:サーフェスフィルをEXCEL_VBAで実行できない
« 返信 #1 投稿日: 2007/04/05 - 12:04:21 »
引用して返信

こんにちは

自分の環境
SolidWorks 2007 SP2.0
Windows XP SP2
で確認したら出来ました。

予想ですが、ライブラリ参照がされていないのかもしれません。
方法は、ExcelのVBA画面で、[ツール]→[参照設定]を選択し、一覧から以下の項目をチェックします。

(1)SolidWorks 2007 type library
(2)SolidWorks 2007 Constant type library

(1)は、SolidWorks APIオブジェクトのライブラリで、(2)は定数のライブラリです。
例:swModel.GetType = swDocPART ←(2)これ

(1)があれば、SolidWorksマクロ同様にアーリーバインディングやインテリセンスが
可能となります。
議長に報告する   記録済み
onigiri
新人さん
*

オフライン

投稿: 5



I'm a llama!

プロファイルを見る
Re:サーフェスフィルをEXCEL_VBAで実行できない
« 返信 #2 投稿日: 2007/04/06 - 08:09:38 »
引用して返信

hisa様

素早い上に、丁寧なご返答ありがとうございます。

最初の投稿で、書き漏らしましたが、EXCELのVBA画面での参照設定は、関係ありそうなものには
チェックを入れてみたのですが、駄目でした。

[参照設定]一覧では
SolidWorks OLE Automation 1.0 Type Library
にチェックを入れて、開きなおすと
SldWorks 2007 Type Library
にチェックがされた状態になります。

SolidWorks 2007 Constant type library
と合わせてチェックされた状態で、実行をかけてみたのですが、やはり駄目でした。

ただhisa様より、「自分の環境・・・で確認したらできました」との情報もいただき
ましたので、その辺りのことに詳しいのをつかまえて調べようと考えています。

本当にありがとうございました。

議長に報告する   記録済み
ページ: [1] Page Top 返信 返信のお知らせ Print 
仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: サーフェスフィルをEXCEL_VBAで実行できない 前のトピック 次のトピック
ジャンプします: