質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

6493閲覧

BricsCADのVBAでボックス属性

Chika

総合スコア12

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2015/12/16 14:23

BricsCADで、VBAで図面の作成日付だけを変換したいと思ってます。
そもそもCADを使った事がないのでよく分からないのですが、とりあえず

・図面上には沢山のレイヤーとブロックがある。
・目的の変換したい箇所は「TITLE」というブロックの「BITEM8」という
場所の値である。

という所までは分かっています。
なので
BOX = AcadBlocks("TITLE")(うろ覚え)
としてやって目的のブロックを取るとこまでは出来ました。が、
プロパティを見ても肝心の値がありません。

エクセルで言えば、Bookに沢山あるシートから目的のシートの
目的のRangeオブジェクトを取るところまでは来ているのですが、
肝心の値がとれない状態です。

お手数をおかけしますが、どこかサンプルがあるようなサイトか、
取り方を教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

きっともっとスマートな方法があるはず。(エラー処理なし)
For each BLR in ThisDrawing.ModelSpace
If BLR.Name ="TITLE" then
ITEM_Array = BLR.GetAttributes
'ITEM_ArrayはVariant配列
'TagStringプロパティ=「名称」
'TextString =「値」

For i = 0 to ubound(ITEM_Array) if ITEM_Array(i).TagString ="BITEM8" then ITEM_Array(i).TextString =本日の日付 End if Next i

End If

投稿2016/01/16 02:45

Chika

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

CAD系のVBAは触ったことがないですが、BricsCADの公式サイトで開発言語を見ると、「AutoCAD相当」と書かれていますので、概ねAutoCADと同じオブジェクトモデルが使用されていると思ってよさそうですね。
AutoCAD VBAで探した方が、文献は見つかりやすいと思います。

たとえばこれ。
AutoCAD Object Summary(PDF)

AcadBlocks("TITLE")でAcadBlockオブジェクトが取得でき、AcadBlockの中には複数種類のItemを格納できるようです。

おそらくそのItemがプロパティを持っているのだと思いますが、以下のようにTypeName関数でItemの型を調べることはできますでしょうか。

lang

1MsgBox TypeName(AcadBlocks("TITLE").Item(1))

そうして調べた型をまたドキュメントで参照したりGoogleで検索したりしながら、目的のプロパティを絞り込んでいきます。

あるいはオブジェクトブラウザを使用するとプロパティなどを簡単に調べられます。
Excel VBA のオブジェクト ブラウザの使い方メモ

が、BricsCADのVBEにオブジェクトブラウザが備わっているのかは不明です。無い場合は、ExcelからBricsCADのAPIorAutoCADのAPIを参照設定してやれば、ExcelのVBEからオブジェクトブラウザでオブジェクトモデルをブラウズできます。

参考になれば幸いです。

投稿2016/01/09 00:05

thom.jp

総合スコア686

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Chika

2016/01/09 01:06

メーカーが違うので違うかなと思っておりました。。 ありがとうございます。 連休明けの昼休みに確認します。
thom.jp

2016/01/09 02:11

まあ、普通はそう思いますよね。 AcadBlocksってのが恐らく、AutoCADBlocksの略です。 BITEM8ってのを見落としてましたので補足です。 BlockItemの8番目という意味かと思うので、以下のどちらかで子オブジェクトをとれるかもしれません。 AcadBlocks("TITLE").Item("BITEM8") AcadBlocks("TITLE").Item(8) そしたらそれのプロパティで設定できるかと。
Chika

2016/01/16 02:34

中々確認の時間がとれず、遅くなりました。 結論から言うと、AcadBlocksでは値をとれないことが分かりました。 値を変更するためのオブジェクトはAcDbBlockReference内のプロパティでした。 色々調べていただき、本当にありがとうございました。 とりあえず自分のメモとして取り方を自己解決欄に記載しておきます。
thom.jp

2016/01/16 06:12

解決されたようで安心しました。 CAD系のVBAは情報が少ないので大変かと思いますが、がんばってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問