OLEオートメーションの設定について
解決済み

製品タグ

現在excel2003のVBAで作成し稼動しています。
このたびVB2010にて登録ツールとして組み込みたいのですが、Docコマンドを認識しません。
どのようにしたら動くのか教えてください。
ちなみにwindows7 のパソコンです。
よろしくお願いします。
CADは、図脳rapidcivil.2です。


アバター naka

タグ: 

回答数: 8
閲覧数: 886
投稿日: 2011年11月25日

回答8件

No.1

excel VBAはVB6とはかなり似てますけど、.NET以降のVBは随分変わってしまったので移行は大変だと思います。私も随分苦労しました。。。

さて、図脳クラブの「CADの情報箱」に「背景色切り替えツール」っていうのがあります。詳しくは「背景色の設定について」というトピックを見て頂くとして、OLEオートメーションをVB2010で動かすための最小限のコードを含んだソースがついていますので、参考にしてみたら如何でしょうか?

Docコマンドを認識しない、とのことですが、多分「Set Doc=」云々の事だと思います。、残念ながらこの構文はVB2010では使えません。前述の「背景色切り替えツール」の該当部分は次の投稿のように記述しています。

大変だと思いますが、VB2010へは「慣れる」しかないんだろうなぁ。
なんせ、VB自体の構文が違うので仕方ないと割り切ってます

1つ星2つ星3つ星4つ星5つ星 (まだ評価がありません)
読み込み中...
投稿日: 2011年11月25日 1:04 PM
No.2

ソース抜粋です。

————————————————-
Private Sub Cad_Connect()
‘ CADに接続します(CADが起動されていない場合は起動します)。
cadApplication = New zwDrawCAD.Application

‘ CADが非表示の場合、CADを表示します。
If cadApplication.Visible = False Then
cadApplication.Visible = True
End If

‘ アクティブなドキュメントがない場合、新規作成を行います。
If IsNothing(cadApplication.ActiveDocument) Then
Dim cadDocuments As zwDrawCAD.Documents
cadDocuments = cadApplication.Documents
cadDocuments.Add()

‘ 参照したオブジェクトを解放します。
Marshal.ReleaseComObject(cadDocuments)
End If
End Sub
————————————————–

1つ星2つ星3つ星4つ星5つ星 (まだ評価がありません)
読み込み中...
投稿日: 2011年11月25日 1:04 PM
No.3
アバター naka

いびざ様 ありがとうございます。
Process_Document.AddCircle(0, 0, 200)等の式を変えても作図できました。メインサブルーチン等そのまま利用させてもらいます。
今ままで使用したコマンドがすべて作動するかは不明ですが挑戦してみます。また、よろしくお願いします。

1つ星2つ星3つ星4つ星5つ星 (まだ評価がありません)
読み込み中...
投稿日: 2011年11月25日 3:44 PM
No.4

nakaさん、こんにちわ。
お役に立てたようでなによりです。

もし、面白いツールが出来ましたら是非公開してくださいね~~。

1つ星2つ星3つ星4つ星5つ星 (まだ評価がありません)
読み込み中...
投稿日: 2011年11月25日 5:25 PM
No.5
アバター naka

いびざ様 いろいろありがとうございます。
図面の縮尺を取込むコマンド
Process_Document.GetScale(Ms, dummysu)
は、エラーが出ますが。oleコマンドのDoc.*** とあるもので一部は作動しないのでしょうか。
面倒な質問すみません。お願いします。

1つ星2つ星3つ星4つ星5つ星 (まだ評価がありません)
読み込み中...
投稿日: 2011年11月29日 11:48 AM
No.6

仕事爆発中につきRes遅れました…..

さて、GetScaleですが、動きましたよ。
VB内の構文など、何でエラーが出ているかチェックしてみて下さい。
以下コードです。
—————————————–
Private Sub Precess_BG()
Dim Process_Document As zwDrawCAD.Document
Dim PD_denomi As Integer, PD_nume As Integer, PD_ret As Boolean

Process_Document = cadApplication.ActiveDocument

PD_ret = Process_Document.GetScale(PD_denomi, PD_nume)

MsgBox(PD_nume / PD_denomi)

End Sub
————————————–

1つ星2つ星3つ星4つ星5つ星 (まだ評価がありません)
読み込み中...
投稿日: 2011年12月5日 7:49 PM
No.7
アバター naka

何度かしましたが 動きませんね。
civil2 を windows7 64 で使っているからですかね。いろいろ試してみます。
64で保証しないことは知ってたけど、パソコン買ったときつい64ビットを買ったもので。ソフトのバージョンアップも高いし。連絡遅れてもうしわけありません。また よろしくお願いします。

1つ星2つ星3つ星4つ星5つ星 (まだ評価がありません)
読み込み中...
投稿日: 2011年12月12日 3:42 PM
No.8
アバター naka

現在VB2010で再チャレンジして動きました。
ありがとうございます。

質問ですが
Dim P_D As zwDrawCAD.Document
P_D = cadApplication.ActiveDocument

この2行だけは、各サブルーチンで書き込まないと動きませんが、どこかに1か所書き込めば認識することはできないのでしょうか。

1つ星2つ星3つ星4つ星5つ星 (まだ評価がありません)
読み込み中...
投稿日: 2013年2月15日 8:23 AM

トピック「OLEオートメーションの設定について」への新規返信追加は締め切られています。