BricsCAD VBAを使ってみよう[2] UserFormその1

前回の
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 半径

 

,VBEでのコード記述前に行う設定

インストール後のVBEのオプション設定で、「変数の宣言を強制する」にチェックが付いていないのでチェックします。

VBE(Visual Basic Editor )画面

左側上から2番目の Require Variable Declaration にチェックを入れます。

すると、Option Explicitが自動的に入力されるようになります。

Option Explicitは、変数にデーター型の宣言を行っていないと、「コンパールエラー 変数が定義されていません。」と警告ダイアログがでてVBマクロが実行できなくなります。

宣言しない場合は、バリアント型(すべての型を格納できる)で自動的に処理されますが、思わぬエラーの原因になる場合(例えば数字と文字列が混在した場合)があり、各データー型で明示的に宣言するようにします。

バリアント型の変数は、配列やオブジェクトも格納できます。

左側1番目の自動構文チェック Auto Syntax Check は、チェックを外しました。
構文エラーはチェックを外しても、エラー個所の文字色が変わるので慣れれば不要です。

 

,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

 

coffee break

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)
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇