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

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









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

仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: OLEオブジェクト 前のトピック 次のトピック
ページ: [1] Page Bottom 返信 返信のお知らせ Print 
   著者  トピック: OLEオブジェクト  (閲覧数 1731 回)
ZAKRELLO
Jr. メンバー
**

オフライン

投稿: 12



I'm a llama!

プロファイルを見る
OLEオブジェクト
« 投稿日: 2010/02/09 - 14:09:41 »
引用して返信

こんにちは

たびたび、すいません。
図面ファイル(slddrw)中のOLEオブジェクト(Excel)を操作しようとしています。
OLEオブジェクト(Excel)を取得し操作できたのですが、操作する前に
取得したOLEオブジェクトがExcelかどうかを判断したいのですが、方法がわかりません。

ネット上を探して見たのですが、なかなか見つからず、もしご存知の方が
おられましたらご教授のほどよろしくお願いいたします。

---------------------------------------------------------------------------
        Dim swApp As SldWorks
        Dim swModel As ModelDoc2

        swApp = CreateObject("SldWorks.Application")
        swModel = swApp.ActiveDoc

        ' 既存 OEL Object取得
        Dim oleobjoptions As Long
        Dim vOleObjs As Object
        Dim indxA As Integer

        vOleObjs = swModel.Extension.GetOLEObjects(oleobjoptions)
        For indxA = 0 To UBound(vOleObjs)
            Dim swOleObj As SwOLEObject
            Dim xlsObje As Object
            swOleObj = vOleObjs(indxA)
            swOleObj.Select(False)

            ' 操作前にOLEオブジェクトがExcelか調べたい
            xlsObje = swOleObj.SetActive(True)

            Dim ObjType As Type
            ObjType = xlsObje.GetType()
            Debug.Print("Select(0) swOleObj = " & ObjType.Name)

            swModel.EditDelete()
        Next indxA
---------------------------------------------------------------------------
議長に報告する   記録済み
Makoron
カタマリの王様!?
*****

オフライン

投稿: 1277



SW2011SP5.0

プロファイルを見る
Re:OLEオブジェクト
« 返信 #1 投稿日: 2010/02/09 - 17:54:02 »
引用して返信

こんにちは。

確実な答えはでていないのですが、オブジェクトからクラスIDが取得できたので、
レジストリから検索すると、どのオブジェクトなのか、判断できそうです。
VBからのレジストリアクセスが難しそうなので、
1.デバッグしてクラスIDを確認
2.レジストリでクラスIDを検索
3.オブジェクトが判明
4.ソースにIfやSelectなどで判断させる
ってな感じでどうでしょうか。

Sub main()

    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2

    Set swApp = CreateObject("SldWorks.Application")
    Set swModel = swApp.ActiveDoc

    ' 既存 OEL Object取得
    Dim vOleObjs As Variant
    Dim indxA As Integer

    vOleObjs = swModel.Extension.GetOLEObjects(swOleObjectOptions_e.swOleObjectOptions_GetAll)
    For indxA = 0 To UBound(vOleObjs)
        Dim swSwOLEObject As SldWorks.SwOLEObject
        Set swSwOLEObject = vOleObjs(indxA)
       
        Dim strClsid As String
        strClsid = swSwOLEObject.Clsid
        ' このClsidの文字列をレジストリエディタで検索すると
        ' アプリケーションがわかります。
        ' VBAでレジストリへのアクセスが大変そうだったので
        ' IFなどで直接Clsid文字列を判断してはどうでしょうか?
        ' I
        If strClsid = "{D3E34B21-9D75-101A-8C3D-00AA001A1652}" Then
            'Paintbrushのオブジェクトです
        End If
    Next indxA

End Sub
議長に報告する   記録済み
ZAKRELLO
Jr. メンバー
**

オフライン

投稿: 12



I'm a llama!

プロファイルを見る
Re:OLEオブジェクト
« 返信 #2 投稿日: 2010/02/12 - 13:13:46 »
引用して返信

Makoronさん、こんにちは

毎度ありがとうございます。返信遅くなりましてすいません。

SetActiveの前で判断しようと思ったら、クラスIDから何とか判断するしかないみたいですね。
SetActiveの後なら

    Dim xlsObje As Object
    Dim swOleObj As SwOLEObject
    Dim xlWkb As Excel.Workbook
                      :
    xlsObje = swOleObj.SetActive(True)
    xlWkb = DirectCast(xlsObje, Excel.Workbook)
    ' xlWkb がNothingならエクセルオブジェクトじゃない

って出来るみたいですが、、、

クラスIDで判断する方向で、やってみます。
ありがとうございます。
議長に報告する   記録済み
ページ: [1] Page Top 返信 返信のお知らせ Print 
仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: OLEオブジェクト 前のトピック 次のトピック
ジャンプします: