このページについて | ||||||||||||||||||||||||||
このページは、mura's home の AutoCAD掲示板 で、当方の発言(書込み)がある以下の掲示板の内容です。
タイトルおよび質問内容は上記より引用しています。 引用した質問内容は、バックカラーが となっています。 当方の発言は、バックカラーが となっています。 その他の著作権者の掲載許可を得ていない発言内容は削除(リンクを除く)しています。 また、当方では、削除部分の正当な著作権保持者を判断出来ませんので、 ご連絡を頂いても、復活させることは出来ません。ご了承下さい。
|
初心者版で質問したのですが再度教えてください。
.NetでもエラーになるのでVBで試してみました。
参照設定
AutoCAD2008
Type Library
AutoCAD/ObjectDBX Common 17.0 Type
Library
これでCAD2006の図面を開くと
「Set objDoc =
objApp.ActiveDocument」で型が一致しません。とエラーになってしまいます。
これでCAD2008の図面を開くときちんと開きます。
CAD2008、CAD2006両方使用するのでAutoCAD2008
Type Libraryを使用し、
AutoCAD/ObjectDBX Common 17.0 Type
Libraryは.Netに移行したときに16.0だとAcadDocumentが使用できないので
このままで行いたいです。
サイトを利用して作成したPGを添付します。
Public
Function Test() As Boolean
Dim strDir As String
Dim strFile As
String
Dim objApp As Object
Dim objDoc As
AcadDocument
strDir = "C:\Documents and Settings\デスクトップ\"
strFile =
"Test.dwg"
'AutoCADアプリケーションの起動
Set objApp =
CreateObject("AutoCAD.Application")
'AutoCADドキュメントのOPEN
objApp.Documents.Open
(strDir & strFile)
'ドキュメント情報の取得
Set objDoc =
objApp.ActiveDocument
Debug.Print
"***************************"
Debug.Print strFile
Dim acadobj As
Object
Dim acBlockRef As AcadBlockReference
Dim I As Integer
For
Each acadobj In objDoc.ModelSpace
If TypeOf acadobj Is AcadBlockReference
Then '属性は AcadBlockReferenceにぶら下がっていますので。
Debug.Print "******* " &
acadobj.Name & " *******"
Set acBlockRef = acadobj
If
UBound(acBlockRef.GetAttributes) > -1 Then '属性を持つと0以上の数値が返ります。
For I = 0
To UBound(acBlockRef.GetAttributes) '属性はひとつのブロックに複数存在することがあります。
Debug.Print
acBlockRef.GetAttributes(I).TagString
Debug.Print
acBlockRef.GetAttributes(I).TextString
Next I
End If
End
If
Next
objApp.Documents.Close
objApp.Quit
End Function
VBも詳しいわけではありませんが。
複数のバージョンがインストールされている環境(PC)で使用するのでしょうか?
それとも別々の環境(PC)の異なるAutoCADのバージョンで使用するのでしょうか?
まずは、こちら
http://www.mura.sh/bbs/wwwbbs.cgi?print+200804/08040095.txt
でも紹介した、PDFの16頁が参考になりませんか?
または、インストールしたフォルダの\Sample\ActiveX\ExtAttrに
Excelマクロ(VBA)からAutoCADへアクセスするのサンプル(ExtAttr.xls)がありますので
参考になると思います。
>CAD2008、CAD2006両方使用するのでAutoCAD2008 Type
Libraryを使用し、
複数のバージョンがインストールされている環境では、
GetObjectやCreateObject等はAutoCADのバージョンを明示的に指示する必要があります。
"AutoCAD.Application"→"AutoCAD.Application.xx"
具体的には、
2000,2000i,2002:"AutoCAD.Application.15"
2004,2005,2006:"AutoCAD.Application.16"
2007,2008:2009?:"AutoCAD.Application.17"
一度開発者用ヘルプで、"CreateObject"か"VBAコードをVBに変換する"を検索してみてください。
#指定無き場合、後に使用したバージョンのAutoCAD が起動とのこと
#参照:http://tech.autodesk.jp/faq/user/result_dd.asp?QA_ID=2268
で、2006と2008では異なる参照設定が必要と思われるので、
両方に対応させるのは難しいのでは、と思うのですが・・・
それぞれのバージョンを用意する方法しか思いつきません。
参照設定が同じバージョンであれば、
http://tech.autodesk.jp/faq/user/result_dd.asp?QA_ID=3768
が参考になるかもしれませんが、異なるとやっぱり難しいのでは。
これ以上は分かりません、他の詳しい回答者をお待ち下さい。
著作権者の許可を得ていないため削除
http://tech.autodesk.jp/faq/user/result_dd.asp?QA_ID=2268
AutoCADのVBAならプロジェクトのロード時に(自身の)参照設定の読替が自動で行われるのですが・・・
VBAではだめですか?
著作権者の許可を得ていないため削除
著作権者の許可を得ていないため削除
2つとも参照設定するのは無理・・・ですよね・・・
申し訳ありませんが、他の詳しい回答者をもう少しお待ち頂くか、
あとは、こちらの米本家のDiscussion
Groups(英語)
http://discussion.autodesk.com/index2.jspa?categoryID=8
へ行かれた方がいいかもしれません。
著作権者の許可を得ていないため削除
著作権者の許可を得ていないため削除
AutoLISPやVBAは上位互換が(ある程度)保証された開発環境、
ObjectARXや.NETはバージョン間で非互換の開発環境(のはず)で、
それを承知の上でのご質問とは思いますが、
通常の方法で対応させるには、オリバー君さんの方法が普通かと。
で、参照設定追加の方法を調べてみました。
.NETは分かりませんがVBAならば、実行時に参照設定の追加や削除が可能です。
#AutoCAD自身の参照設定の削除は無理でしょうが、、、
#Application.VBE.ActiveVBProject.Referencesオブジェクト(下記設定)
考えられる対応策は、AutoCADのバージョンを調べて(上記のQA_ID=3768参照)
実行時に参照設定を追加し、内部で処理を振り分ける方法でしょうか。
以下はVBAの組込サンプルです。
'実行時に参照設定の追加 サンプルプログラム Option Explicit ' 開発・動作確認 2000i ' Public Sub AddReference() Dim CheckFLG As Boolean Dim Style As Long Dim Msg As String Dim Title As String Dim Ref As Object Dim ReferencesFileFullName As String On Error GoTo ERR: CheckFLG = False '----------------------------------------------------------------------------- 'ご使用の環境のフルパスに書き換えてください 'Microsoft Excel 9.0 Object Library ReferencesFileFullName = "C:\Program Files\Microsoft Office\Office\EXCEL9.OLB" '----------------------------------------------------------------------------- With Application.VBE.ActiveVBProject '組込の簡易チェック ' 注意)別フォルダの同一のライブラリが組み込まれていても判別できない For Each Ref In .References If Ref.FullPath = ReferencesFileFullName Then CheckFLG = True Exit For End If Next Ref If CheckFLG Then Msg = "参照設定: [" & Ref.Description & "] はすでに組み込まれています。 " Style = vbOKOnly + vbInformation Title = "AddReference" MsgBox Msg, Style, Title Else .References.AddFromFile ReferencesFileFullName Msg = "参照設定: [" & .References.Item(.References.Count).Description & "] を組み込みました。 " Style = vbOKOnly + vbInformation Title = "AddReference" MsgBox Msg, Style, Title End If End With Exit Sub ERR: Msg = "参照設定の追加エラー " Style = vbOKOnly + vbCritical Title = "AddReference" MsgBox Msg, Style, Title End Sub |
当方よく分かっていないのですが、
開発環境は2006と2008の両者で同一バージョンが使用できるのですよね?
その辺の事情をご存じの方教えていただけませんか?
#たとえば"Microsoft Visual Basic 2005 Express
Edition"なら
#どのバージョンのAutoCAD用の開発が可能なのかとか、、、
#ライブラリが公開されている2000以降?なら可能ですか?
で、次善の策は、
ライブラリを間接的に参照する方法があるようです。
#間接参照ライブラリを、2006と2008用2つ用意して
#プロジェクトからは、間接参照ライブラリを参照する
組込済みなら、解除する仕様に変更しました。
http://www.geocities.jp/kamegai2006/autocad/index_2.htm#20080424
上記のVBAサンプルですが、プロジェクトを書き換えているので、
AutoCAD終了時(またはプロジェクトのロード解除)に、
プロジェクトを保存するか確認ダイアログが表示されます。ご参考まで。
著作権者の許可を得ていないため削除
著作権者の許可を得ていないため削除
著作権者の許可を得ていないため削除