Random Thoughts |
You must be tired, because you've been running through my mind all day!
|
言語 |
|
|
|
フォーラムニュース: 質問、相談カテゴリに「SolidWorks操作方法」に関するフォーラムを追加しました。(2003/11/27) |
いらっしゃい、 ゲストさん. まずはこちら→ ログイン または 登録. 2024/11/23 - 11:22:26 |
|
|
|
著者
|
トピック: OLEオブジェクト (閲覧数 1776 回) |
|
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で判断する方向で、やってみます。 ありがとうございます。
|
|
|
|
|
|
|
|