前回の
BricsCAD VBAを使ってみよう[1](VBAのインストール)
からの続篇です。
UserFormは、MSOfficeのUserFormと同じです。
MSOfficeのVBAを使われている方はすぐにコード作成を行えます。
まず初めに、前回の円作図のサンプルコードで、
Set myCircle = ThisDrawing.ModelSpace.AddCircle(ctrPt, 4)
の構文に関して、BricsCAD 開発者のリファレンスのページ
で、BricsCADVBAのリファレンスを確認してみます。
1,VBAのオブジェクトによる作図の概要
1,Addメソッド
Set myCircle = ThisDrawing.ModelSpace.AddCircle(ctrPt, 4)
この構文の内容は以下になります。
変数myCircleに格納=現在のアクティブな図面の、モデル空間に、Circleオブジェクトを作成(座標, 半径)
Add method とAddCicle methodを確認してみます。
Add method
メンバーオブジェクトを作成し、適切なコレクションに追加します。
AddCicle method
は、前回にサンプルコードを確認した箇所です。
objectVariable = object.AddCircle(Center、Radius)
概要は、
・objectVariableはAcadCircleオブジェクトです。
・オブジェクトは、ModelSpaceまたはPaperSpaceコレクションオブジェクトの1つ、またはBlockオブジェクトです。
・Centerは、円の中心を表すバリアントです。
・Radiusは、円の半径を表す倍精度変数または数値です。
となります。
2,オブジェクト・メソッド・プロパティ
AddCicleのCircleオブジェクトについて確認します。
左側ツリーの、COM (Component Object Model)の
The BricsCAD automation object model
BricsCADオブジェクトモデルの大きな図があります。
名称をクリックすると、そのオブジェクトの情報に移動します。
表が大きいので、Circle objectの個所をピックアップしました。
(コレクションは、同じ種類のオブジェクトの集合体)
Circle objectをクリックすると
=============
① Circle object
② Class AcadCircle
③ Member of BricscadDb
Circleオブジェクトは、完全な円を表します。
円を作成するには、AddCircleメソッドを使用します。
Circleオブジェクトにアクセスするには、次のメソッドとプロパティを使用します。
=============
と、あります。
③ Member of BricscadDb
BricscadDbは、VBE画面の参照設定→参照可能なライブラリファイルで、
BricsCAD Db 20.0 Type Library(×64)が登録されています。
View→ObjectBrouserで、BricdcadDbを選択
② Class AcadCircle
BricdcadDbのメンバに AcadCircleのクラスがあり
AcadCircleのメンバに各メソッドがあります。
① Circle object
Member of AcadCircle にCircle objectの
Methods と Prorethies があります。
3,Entity object
=============
Entity object
Class AcadEntity
Member of BricscadDb
=============
Entityオブジェクトは、すべてのDrawingオブジェクトに共通のメソッドとプロパティを公開します。・・・・
(Entityとは、DBのデータをプログラム上に反映させるためのオブジェクトです。)
このサンプルは、GetEntityで作図した円から半径と中心点の座標値を取得します。
Sub GetEntity_Sample() ''円を選択し、半径と中心点の座標値を取得する。 Dim objEnt As AcadEntity Dim pt() As Double Dim CirRad As Double Dim CenPt As Variant ''図形を選択 Call ThisDrawing.Utility.GetEntity(objEnt, pt(), "図形を選択: ") ''円の円のCenter座標値を取得半径を取得 CenPt = objEnt.Center CirRad = objEnt.Radius MsgBox "半径:" & CirRad & " X,Y,Z " & CenPt(0) & "." & CenPt(1) & "." & CenPt(2) End Sub
前回に、半径5、座標5.5.0で作図した円を選択した結果です。
(参考)
作成した円のデーターは、DXFで保存して確認すると、
ENTITIESセクションで、以下の内容で記録されています。
行番号 | グループコード | データー値 | 備考 |
2139 | 2 | ENTITIES | エンティティセクション |
2141 | 0 | CIRCLE | 円 |
2143 | 5 | 81 | ハンドル |
2145 | 330 | 16 | ソフトハンドルポインタ |
2147 | 100 | AcDbEntity | サブクラスデータマーカー |
2149 | 0 | 0 | 画層名 |
2151 | 100 | AcDbCircle | サブクラスデータマーカー |
2153 | 10 | 5.0 | 中心点X |
2155 | 20 | 5.0 | 中心点Y |
2157 | 30 | 0.0 | 中心点Z |
2159 | 40 | 5.0 | 半径 |
2,VBEでのコード記述前に行う設定
インストール後のVBEのオプション設定で、「変数の宣言を強制する」にチェックが付いていないのでチェックします。
左側上から2番目の Require Variable Declaration にチェックを入れます。
すると、Option Explicitが自動的に入力されるようになります。
Option Explicitは、変数にデーター型の宣言を行っていないと、「コンパールエラー 変数が定義されていません。」と警告ダイアログがでてVBマクロが実行できなくなります。
宣言しない場合は、バリアント型(すべての型を格納できる)で自動的に処理されますが、思わぬエラーの原因になる場合(例えば数字と文字列が混在した場合)があり、各データー型で明示的に宣言するようにします。
バリアント型の変数は、配列やオブジェクトも格納できます。
左側1番目の自動構文チェック Auto Syntax Check は、チェックを外しました。
構文エラーはチェックを外しても、エラー個所の文字色が変わるので慣れれば不要です。
3,UserFormの作成
insert → UserForm
UserForm1と Toolboxが表示されます。
Toolboxが表示されていなかった場合は、UserForm1をクリックすると表示されます。
ShowModalをTrueからFalseに変更します。Trueでは作図の終了や中止でESCキーでユーザーフーォームを再表示した時、CAD画面が触れないため変更しました。
前回のAddCircleExampleのコードを使ってテスト作成します。
4,OK・Cancelボタンの作成
ツールボックスから上列右端の「CommandButton」でボタンを2つ作成します。
位置や大きさは後で自由に変えれますので、ここでは全く気にしません。
CommandButton1の(Name)をcmdOK、CaptionをOKに変更します。
同様に、CommandButton2の(Name)をcmdCancel、CaptionをCancelに変更します。
この、OK・Cancelボタンはユーザーフォームからの「実行」と「終了」のための必須ボタンです。
CmdOKボタンをダブルクリックするとOKボタンを押したときに実行するプログラムを記述するための、Subプロシージャが作成されます(中身はまだ空の状態です)
プロジェクトエクスプローラのUserForm1をダブルクリックしてユーザーフォームを再表示します。
続けて、CmdCancelボタンをダブルクリックすると
Cancelボタンを押したときのマクロのSubプロシージャが作成されます(中身はまだ空の状態です)
Private Sub CmdCancel_Click() 内は
Unload Me とします。
Private Sub CmdOK_Click() 内に、前回のModule1から、もしくは再度ReferenceのAddCircle method exampleから
プロシーヤ内のコードをコピペして貼り付けます。
コードの最後のMsgbox・・・・の行は、削除するか、下記のようにコメントアウトします。(さらにMsgboxが表示されると邪魔なので)
5,ユーザーフォームからの実行
コード表示のまま、Run SubボタンかF5キーで実行します。
ユーザーフォーム表示 → OKボタン → 円作図 → Cancelボタン です。
(参考)
UserForm1のコードとフォーム(Object)の行き来は、右クリックメニューで出来ます。
作成したものを保存する場合はSave Defaultですが、名前をtestformとかに変更して保存します。(もしくは、ファイル保存後に Defaultのファイル名を変更します。)
拡張子が.dvbのファイルが保存されます。
もし、前回のModule1が残っていた場合は、保存時一緒に保存されますので、削除しておきます。
なぜか、ここだけ日本語出てきますね・・・
必要ないのでいいえ(N)です。
6,具体的なコマンドの作成
円を描くだけでは、UserFormを使う必要性は特に無いので、円作図に文字記入を加えて「連番」のコマンドを検討しました。
連番【初号機】です。(X1X2・・・、ABC・・・、イロハ・・・とかのパターンも考えれますが追い追いに)
桁揃えと2重円の組み合わせで作図します。
次ページは、作成した「連番」コマンドの作成手順と、VBAプログラムの実行【ーVbaRUN】と【VbaRUN】に関してです。
BricsCAD VBAを使ってみよう[3] UserFormその2
OfficeのVBAと同様に、BricsCAD VBAでもUserformに部品を配置して多様なコントロールが可能になります。
多量のデーター処理が必要な場合では、Excelと連動してやり取りができるようにすればものすご~~く作業効率のアップができそうです!
単純作業の繰り返しが多くなればなるほど時間がかかり、入力ミスも発生しやすくなりますが、プログラムで処理ができると、いろいろな面で大きなメリットが得られます。
指が痛たぁ~くなるのも減らせそうです!
BricsCAD VBAを使ってみよう INDEX
BricsCAD VBAを使ってみよう[1] VBAのインストール
BricsCAD VBAを使ってみよう[2] UserFormその1
「BricsCAD VBA 」Creating UserForm
BricsCAD VBAを使ってみよう[3] UserFormその2
「BricsCAD VBA 」SerialNumber drawing with UserForm
BricsCAD VBAを使ってみよう[4] VBAの基本コード①
BricsCAD VBAを使ってみよう[5] VBAの基本コード②
BricsCAD VBAを使ってみよう[6] Excelとの連携①
「BricsCAD VBA to Excel」Get_CoordinateValues
BricsCAD VBAを使ってみよう[7] Excelとの連携②
「Excel VBA to BricsCAD」Get_Area
BricsCAD VBAを使ってみよう[8] Excelとの連携②-2
「Excel VBA to BricsCAD」Draw_ChannelSteel
BricsCAD VBAを使ってみよう[9] TABLEの自動作成と値入力
「BricsCAD VBA 」AutomaticCreation of TABLE
BricsCAD VBAを使ってみよう[10] Excelとの連携②-3
「Excel VBA to BricsCAD」SerialNumber_Ⅱ
BricsCAD VBAを使ってみよう[11] Excelとの連携②-4
「Excel VBA to BricsCAD」Draw_Rectang
BricsCAD VBAを使ってみよう[12] Excelとの連携②-5 指定画層にOffset
「Excel VBA to BricsCAD」Continuous Offset to Specified Layer
BricsCAD VBAを使ってみよう[13] Excelとの連携②-6 指定画層にHATCH
「Excel VBA to BricsCAD」Continuous Hatch to Specified Layer
BricsCAD VBAを使ってみよう[14] Excelとの連携②-7 長さ計測
「Excel VBA to BricsCAD」Get Length
以下検討中です。
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
「この特集記事の内容につきましては、
こちらの環境のみの検討結果です。
動作保証は出来かねますため、ご参考
資料としてお扱いください。
Windows10(64bit)
BricsCAD pro V20(64bit)
Office2019(64bit)
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇