このシリーズの最後の記事では、VBA(Visual Basic for Applications)について見ていきます。 BricsCAD for WindowsのProおよびPlatinumバージョンには、Microsoftのプログラミング言語の1つであるVBAが含まれています。これは、ソフトウェアプログラム内で動作するように設計されたVisual Basicのバージョンです。 BricsCADは、メニューとツールバーから、およびコマンドプロンプトからVBAプログラムを実行します。

VBAは完全に異なります LISP、LISPが完全に異なるように ディーゼルとマクロ。 BASICプログラミング言語を習得した場合、残念ながらVisual BasicにはBASICとの共通点は名前以外にないため、その知識は役に立ちません。

この章では、VBAプログラミングの概念を紹介し、VBAプログラミングの使用方法を示します。

BricsCAD。 (クラシック、MacOS、Linux、およびBricsCADのデモバージョンにはVBAが含まれていません。)

BricsCADのVBAの完全な概要については、公式、 BricsCAD VBA開発者ガイド.


この投稿では、次のトピックについて説明します。


VBAの概要

VBAは、BricsCADで2番目に重要なプログラミング言語です。 LISPは学習と使用が簡単な2つの方法ですが、大規模なプログラムや大量のデータセットの場合、煩雑で時間がかかります。さらに、LISPではダイアログボックスを作成するために、理解しにくいDCLシステムを採用する必要があります。

プログラミングスペクトルのもう一方の端は、DRXまたはBRX、DWGまたはBricsCADランタイム拡張です。これらのプログラミングインターフェイスは、BricsCADに密接に関連付けられているため、すべての中で最速です。 D / BRXアプリケーションプログラミングインターフェイスは、Cまたはその派生の1つで記述されたプログラムで使用します。それらを学ぶのは簡単ではなく、欠点があります。D/ BRXで動作するコンパイラーに料金を支払う必要があります。対照的に、LISPはBricsCADのすべてのバージョンで無料で、VBAはBricsCAD Proで無料です。 DRXはこの本ではカバーされていません。 BricsCAD V8以降、B / DRXはSoftdesk Development SystemであるSDSに置き換わるものです。また、V8以降、BricsCADはVBAソースファイルの形式をIntelliCADのVBIからAutoCADのDVB形式に切り替えました。

対照的に、VBAは高速であり、今日のユーザーインターフェイスを考慮して設計されています。 VBAを学習する利点は、他の多くのWindowsプログラムで同じプログラミング言語を使用できることです。 一度学ぶ、多くのプログラム。 おそらく、VBAの学習で最も難しい部分は、その専門用語を知ることです。さぁ、始めよう!

VBAプログラムへのアクセス

「VBエディタ」と呼ばれる別のプログラミング環境でVBAコードを記述します。エディターは、コードの記述や、通常はダイアログボックスで構成されるユーザーインターフェイスの構築を支援します。

VTPプログラムは、BricsCADコマンドラインまたはそのアドインマネージャダイアログボックスから実行できます。プログラムは、メニューやツールバーのマクロ、およびVisualLISP関数から起動することもできます。この電子ブックでは取り上げません。

コードは 埋め込み BricsCAD図面内、またはすべての図面からアクセスできるようにBricsCADの外部に保持:

  • 埋め込みマクロを実行するには、 VbaRun
  • に格納されているマクロを実行するには。DVD プロジェクトファイル、最初にそれらを読み込む VbaMan ダイアログボックスまたは VbaLoad コマンド・プロンプト。ロードされると、マクロは次のいずれかで実行できます。 VbaRun または VbaMan コマンド

コマンドの送信

VBAには、LISPのように機能するコマンドがあります (コマンド) 関数: SendCommand Line、Erase、ZoomなどのBricsCADコマンドを実行します。この関数は、「1,1」や「すべて」などのコマンドオプションも処理します。

それを見てみましょう。これは、x、y座標のいくつかのペアの間に線を引くためのVBAコードです。

Sub Using_the_SendCommand()

ThisDrawing。SendCommand 「行1,1 1,8 11,8 11,1 c」

End Sub

ヒント このVBAコードは、次のようなLISPの同等のコードとそれほど変わりません。

(defun using_the_sendcommand()

(コマンド「line 1,1 2,2 c」)

)

VBAコードのスニペットで使用される単語の意味は次のとおりです。

Subは、新しいサブルーチン(または関数)を開始します。

Using_the_SendCommand() サブルーチンに名前を付けます。括弧()は、変数が使用されていないことを示します。 LISPとは異なり、VBAは事前に変数の名前と型を知る必要があります。この章の後半で変数と型について説明しますが、今のところ、型はテキスト(文字列)、整数(整数)、10進数(実数)など、変数が保持するデータの型を指すことを知っていれば十分です。その他の種類のデータ。

ThisDrawing.SendCommand 総称的に「ThisDrawing」で識別される現在の図面で動作します。図面の名前を指定するのではなく、「ThisDrawing」を使用するだけでよく、VBAはあなたが話していることを認識しています。

「行1,1 1,8 11,8 11,1 c」 Lineコマンドを実行して、1,1から11,8までの長方形を構成する4本の線を描画します。コマンドとそのプロンプトは文字列として読み取られ、BricsCADのコマンドプロセッサに送信されます。これは、コマンドプロンプトでこれを入力した場合と同じです。

ヒント コマンドを正しく終了するには、文字列の最後の、引用符の直前にスペースがあることを確認してください。上記のコードでは、cと“の間のスペースを確認できます。

End Sub サブルーチンの終わりを示します。


組み込みまたは外部

BricsCADは、VBAマクロを図面(埋め込み)または.dvbファイル(外部)に保存します。次の表に示すように、各方法には長所と短所があります。

埋め込み 外部 
ストレージ 図面で DVD ファイル
読み込み中 図面が読み込まれました VbaLoadコマンドでロード
分布 とともに 。dwg ファイル とともに 。DVD ファイル
原子炉 はい 番号

埋め込まれたマクロは、他の図面ファイルに具体的に埋め込まない限り、他の図面では使用できません。

VbaManコマンドの[埋め込み]ボタンを使用して、プロジェクトを埋め込みプロジェクトに変換します。埋め込みマクロの深刻な問題は、マクロがウイルスを含む可能性があることです。したがって、BricsCADは警告ダイアログボックスを表示して、マクロを無効または有効にするか、マクロをまったく読み込まないようにするかを選択できます。


VBAルーチンの作成と実行

LISPルーチンの作成にはメモ帳やその他のテキストエディタを使用できますが、VBAにはBricsCADに含まれているプログラミング環境を使用する必要があります。この環境を使用して、すべてのコードを記述および実行します。 VBAエディターにアクセスするには、次の手順に従います。

  1. 最初のステップは、BricsCADがVBAマクロを実行できるようにすることです。 VBAはウイルスの発生源であるため、通常、VBAプログラムを実行する機能はオフになっています。次に、VBAマクロを有効にします。
    1. BricsCADから 道具 メニュー、選択 安全保障。 [セキュリティ]ダイアログボックスに注意してください。はじめにビジュアルベーシック
    2. 必要に応じて、 セキュリティレベル タブ。
      ヒント このダイアログボックスが必要なのは、Microsoftプログラマによる決定が不十分なためです。彼らはVBAを作成したとき:ドキュメントにVBAコードを格納することを許可しました。ハッカーが悪意のあるVBAコードを含む無害に見えるWordおよびExcelファイルを簡単に配布できるようになったため、この便利な機能は主要なセキュリティ問題になりました。
      非常に多くの人々や企業が貴重なファイルをコンピューターから消去することに苦しんだ後、Microsoftはついにこのダイアログボックスを追加して、VBAの悪用を克服しました。現在、WindowsベースのドキュメントはデフォルトでVBAコードを実行できないため(セキュリティレベル=高)、VBAが機能するためにはセキュリティレベルを下げる必要があります。
    3. セキュリティレベルが高に設定されている場合は、セキュリティレベルを または 。設定の違いを次の表に示します。
      VBA設定 意味
      高い すべてのVBAルーチンは操作できません。デフォルト。
      BricsCADは、各VBAルーチンを実行するかどうかを尋ねます。
      すべてのVBAルーチンは問題なく実行されます
    4. このダイアログボックスでセキュリティレベルを変更した後、BricsCADを 終了する コマンドまたは使用 ファイル|出口.
  2. VBAを有効にすると、プログラミング環境を開くことができます。から 道具 メニュー、選択 VBA、436カスタマイズBricsCAD V20を選択し、 アプリケーション用のVisual Basic。 VBAプログラミング環境に注目してください。ビジュアルベーシックワークスペース
  3. コードはモジュールで記述されています—最初は空白のフォームで、コードを入力します。新しいモジュールを開始するには、 インサート メニュー、選択 モジュール。次に示すように、空白のウィンドウが表示されます。visdual basicsアプリケーションコーディング
  4. 次のコードをモジュールに入力します。 (これは、前に見たのと同じ線画コードです。)

    Sub Using_the_SendCommand()

    ThisDrawing.SendCommand "行1,1 2,2 1,2 c"

    End Subコーディング

  5. これで、プログラムを実行するのに十分なコードができました。ツールバーにある「実行」ボタンをクリックします。visdual basicsアプリケーションコーディングの紹介成功! BricsCADが三角形を描くことに注意してください。ルーチンの実行に失敗した場合は、次の問題を確認してください。
    • セキュリティは高または中に設定されていますか?
    • コードにスペルミスは含まれていますか?

SendCommandを使用してエンティティを描画および編集したり、ズームやパンなどのコマンドを使用して視点を変更したりできます。これを使用して、ブロックの挿入、プロパティの変更、図面のプロットを行うことができます。コマンドのオプションを正しく入力するように注意してください。座標とオプションの名前は特にうるさいです。

メッセージの表示

ダイアログボックスにメッセージを表示するのは、このコードを MsgBox 関数:

MsgBox「描画枠が完成しました。」

  1. VBAエディターのコードに行を追加します。コードを編集する
  2. 次に、 走る ボタンをもう一度。次のようなBricsCADのダイアログボックスが表示されます。

これは、DISPを使用してLISPでダイアログボックスをコーディングするよりもはるかに簡単です。

ダイアログボックスの作成

ダイアログボックスといえば、VBAには、「ユーザーフォーム」と呼ばれる対話型ダイアログボックス構築キットが含まれています。それがどのように機能するか見てみましょう。

新しいユーザーフォームを開始するには、次の手順に従います。

  1. プロジェクトパレットで右クリック Module1.
  2. ショートカットメニューから、 インサート、次に選択 ユーザーフォーム.
    ドットのグリッドで満たされた灰色のウィンドウに注目してください。ここで、ダイアログボックスをデザインします。
    フォームに隣接するのがツールボックスです。これには、ダイアログボックスを構成する要素(正しいVBA用語では "コントロール"と呼ばれます)が含まれています。テキスト入力ボックス、チェックボックス、ラジオボタンなど、多くのコントロールを認識します。
  3. コントロールを配置するには、ツールボックスからコントロールを選択して、ユーザーフォームに配置します。たとえば、チェックボックスを追加するには、次の手順に従います。
    1. ツールボックスで、チェックボックス項目をクリックします
    2. Userform1で、任意の場所をクリックします。チェックボックスには、「Checkbox1」という一般的なテキストが配置されていることに注意してください。
    3. チェックボックスのテキストやその他のプロパティを編集するには、プロパティパレットを確認します。 (表示されない場合は、 プロパティウィンドウ から 見る メニュー;必要に応じて、 分類された タブ。)コントロールの名前と他の多数のプロパティに注意してください—選択は非常に圧倒される可能性があります。
    4. いくつかのコードを記述し、簡単なダイアログボックスを描画しました。チェックボックスをVBAコードに接続するには、 オブジェクトを選択 ツールボックスからツールをクリックし、チェックボックスコントロールを次にダブルクリックします。チェックボックスのビジュアルコーディング
      別のモジュールウィンドウが開き、そこにコードを入力できることに注意してください。この時点では詳しく説明しません。要素の追加Bricscad

この章の後半で、コードダイアログボックスのリンクを詳しく見ていきます。最初に、しかし、
VBAの実際の動作の概要。

BricsCAD V20オートメーションオブジェクトモデル

 VBAの実際の動作

オブジェクト指向プログラミング

プログラミングでは、より効率的に動作します オブジェクト。いいえ、ジオメトリックオブジェクトではなく、プログラミングオブジェクトです。区別を明確にするために、私は幾何学的オブジェクトを エンティティ.

あなたはVBAのオブジェクト指向の性質のヒントを持っていました ThisDrawing.SendCommand コードの一部:SendCommand関数は、現在の図面であるThisDrawingオブジェクトを操作するように指示されます。次のようなオブジェクトをThisDrawingに追加できます。 ModelSpace コマンドがペーパー空間ではなくモデル空間で実行されるようにするには:

ThisDrawing。ModelSpace.SendCommand()

それらを接続するドット(。)に注意してください。これは、LISPがエンティティデータにアクセスするために使用する点線のペアのドットとよく似ています。 VBAはオブジェクト指向を前提としており、BricsCADのすべてがオブジェクトとして、厳密な階層に従って編成されています。技術的には、これはMicrosoftのCommon Object Model(COM)を介した「BricsCADデータベースの公開」として知られています。

一般的なオブジェクトモデル

見開きページには非常に重要な図があります。これはBricsCADのオブジェクトモデルの図です。 (新しいオブジェクトが導入されると、リリースごとに変化します。)チャートは、エンティティとオブジェクトの関係を示しています。

  • エンティティは、見つかったモデルまたはペーパー空間、またはブロックにあります
  • モデル/ペーパー空間とブロックは次の場所にあります 書類
  • ドキュメント(図面)は、 応用 (BricsCAD)

図の代わりに、次に説明するBricsCADのVBAプログラミング環境にあるオブジェクトブラウザを使用できます。

OBJECT BROWSER

オブジェクトブラウザには、VBAがBricsCADでアクセスできるすべてのオブジェクトが一覧表示されます。オブジェクトブラウザを使用するには、次の手順に従います。

  1. から 見る メニュー、選択 オブジェクトブラウザ。オブジェクトブラウザパレットに注目してください。VBAのカスタム要素
  2. [すべてのライブラリ]ドロップリストで、次を選択します BricsadDb。 (DBはデータベースの略です。)ドロップダウン選択ボックス
  3. 下にスクロールして AcadLine。これはBricsCADラインエンティティですが、AutoCADでプログラムされたVBAアプリケーションとの互換性を維持するためにacadlineという名前が付けられています。
  4. 右側では、ラインエンティティで使用できるすべてのプロパティ、メソッド、およびイベントに注目してください。次のセクションで詳しく説明します。
  5. 下部には役立つ情報があります。カーソルをメンバーの上に置くと、簡単な説明と親へのリンクが表示されます。
    次の図は、長さに提供される情報を示しています。
  • 長さは 財産 現在の行の長さを指定します。
  • これは二重変数(倍精度浮動小数点)です。
  • Isは読み取り専用です。つまり、プログラマとユーザーは値を編集できません。
  • BricsCADDb.AcadLineのメンバーです。

これで、プロパティパレットが、図面内のすべてのエンティティのBricsCADDbによって保存された値を報告することに気付くでしょう。ラインオブジェクトに伴うすべてのことを詳しく見てみましょう。

チップ ボタンとテキストボックスの名前を変更して、名前がそれらの機能を説明するようにします。たとえば、OKボタンの名前をbtnOKに変更します。 Last Pointテキストボックスの名前をtxtLastPointなどに変更します。

コードウィンドウのフォントサイズとスタイルが小さすぎる場合は、それらを変更できます。 [ツール]メニューから[オプション]を選択します。 [エディター形式]を選択し、別のフォントサイズやフォント名を選択します。

VBAコードエディターは、色を使用してさまざまな種類のコードを強調表示します。

緑のテキストコメント
黒い文字通常コード
青色のテキストVBAキーワード
構文の赤いテキストエラー
黄色のハイライト実行ポイント
茶色のハイライトブレークポイント

LINE ENTITY

ラインエンティティは、 AcadLine モデル空間またはペーパー空間、およびブロック内のメソッド:

  • ModelSpace.AddLine モデル空間に線を追加します。
  • PaperSpace.AddLine 現在のレイアウトタブに線を追加します。
  • Block.AddLine 指定したブロック、ダイナミックブロック、または外部参照ブロックに行を追加します。

行には、プロパティ、メソッド、およびイベントがあります。

  • 物性 ジオメトリとラインの外観に影響します。
  • 方法 行を編集する方法を指します。
  • イベント エンティティが変更されたと報告する方法を指します

以下に、ラインエンティティのすべてのプロパティ、メソッド、およびイベントをリストしました。リストはあなたにアイデアを与えます
BricsCADの内部へのアクセスの豊かさ(または複雑さ)の豊かさ
VBAを通じてオブジェクトモデルによって提供されます。

物性

線には次のプロパティがあります。これらのいくつかはおなじみのものです。他は新しくなります。

物性 意味
幾何学的プロパティ
角度 反時計回りに測定されたX軸からの角度(ラジアン)
デルタ あるエンドポイントから別のエンドポイントへのDelta-x、-y、および-zの値
長さ 線の長さ
正常 線に垂直
終点 線の終点のX、Y、Z座標
出発地点 始点のX、Y、Z座標
エンティティのプロパティ
ハイパーリンク 埋め込みハイパーリンク
レイヤー名
線種 線種名
線種スケール 線種尺度
線の太さ 線の太さ
素材 マテリアル名(レンダリングに使用)
PlotStyleName 印刷スタイル名(有効な場合)
厚さ Z方向の厚さ
天然色
目に見える レイヤー設定に依存しない可視性
その他の特性
応用 BricsCADアプリケーションを指定します
資料 図面を指定します
扱う エンティティ識別番号を指定します
HasExtensionDictionary 行に拡張辞書があるかどうかを報告します
ObjectID エンティティID番号を取得する別の方法
所有者ID 親オブジェクトのObjectIDを報告します

方法

この行は次の方法で編集できます。

方法 意味
エンティティ編集
ArrayPolar 線の極配列を作成します
ArrayRectangular 長方形配列を作成します
コピー 行をコピーします
削除する 行を消去します
ミラー ラインをミラーリングする
Mirror3D 3Dでラインをミラーリングします
移動 行を移動します
オフセット ラインのオフセットコピーを作成します
回転 線を回転させます
回転3D ラインを3Dで回転します
ScaleEntity ラインのサイズを変更します
TransformBy ラインを移動、スケーリング、または回転します。
その他の方法:
GetBoundingBox 線を囲む長方形の座標を報告します
GetExtensionDictionary 線の拡張辞書を返します
GetXData ラインの拡張エンティティデータを返します
SetXData 行に拡張エンティティデータを格納します
交差する 線が他のオブジェクトと交差する座標を返します
ハイライト 行を強調表示します
更新 ラインを再生します

イベント

エンティティが変更されると、イベントがトリガーされます。ラインの場合、イベントは1つだけです。の 修正 イベントは、新しい値が現在の値と等しい場合でも、プロパティが設定されるたびにトリガーされます。

モーダルダイアログボックスが開いている間、イベントはトリガーされません。 (A モーダル ダイアログボックスは、BricsCADでの作業を続ける前に閉じる必要があるものです。つまり、ほとんどのダイアログボックスです。)

コード付きダイアログボックス

以前の投稿で、私はあなたに方法を示しました DCLを使用してダイアログボックスを作成する、LISPコードを追加して機能させます。ダイアログボックスは次のようになります。

ダイアログボックスには、3つのシステム変数の現在の値が表示されます。

  • 最後のポイント LastPointシステム変数の現在の値を報告します。
  • 最後の角度 LastAngleの値を報告します(読み取り専用)。
  • 最後のプロンプト LastPromptの値を報告します(読み取り専用)。

チュートリアルを繰り返しましょう。今度は、VBAを使用して、DCLとLISPによって別々に行われる両方のジョブを実行します。その後、ダイアログボックスを設計し、コードを記述して実行します。

ダイアログボックスの設計

ダイアログボックスは、VBAプログラミング環境で次のように設計されています。

  1. BricsCADを起動し、ツール| VBA | VBAプログラミング環境を開くためのVisual Basic for Applicationsコマンド。
  2. 新しいユーザーフォームを開始します。 ([挿入]メニューの[UserFrom]を選択します。)VBAがUserForm1という名前の汎用ダイアログボックスを作成することに注意してください。
  3. 次の手順に従って、タイトルバーの名前を変更します。
    1. プロパティパレットを開きます。 (「表示」メニューから「プロパティウィンドウ」を選択します。)
    2. [キャプション]までスクロールし、[UserForm1]を[最後の入力]に変更します。入力すると、ダイアログボックスのタイトルバーが同時に更新されます。VBCを使用してbricscadのカスタム要素を作成する
  4. 新しいダイアログボックスの大部分は、3つのテキスト入力ボックスで構成されています。最初のものは次のように構成されています:
    1. ツールボックスで、 テキストボックス コントロール。
    2. フォームの中央をクリックします。テキスト入力ボックスが表示されますが、「Last Angle:」などのユーザーへのテキストプロンプトがないことに注意してください。少し後でテキストを追加します。ボックスの解剖学
  5. BricsCADでは、LastAngleシステム変数は読み取り専用です。つまり、ユーザーは値を表示できますが、変更することはできません。ユーザーが編集できないテキストボックスは、従来は灰色に色分けされています。テキストボックスを読み取り専用にしてグレーにする方法は次のとおりです。
    1. テキストボックスが選択されていることを確認します(上図のようにグリップがあります)。
    2. プロパティパレットで、([表示]セクションにある)BackColorの値を非アクティブなタイトルバーに変更します。

    「非アクティブなタイトルバー」は列挙型であり、VBAのプリセット値であり、LISPのpiのようなものです。 (列挙型は「列挙型」の略です。)ユーザーがWindowsのユーザーインターフェイスの色を変更すると、このテキストボックスの背景色も変更されます。

  6. プロンプトを追加するには、次のようにラベルツールを使用します。
    1. を選択します ラベル ツールボックスからのツール。
    2. テキストボックスの前にある長方形をクリックしてドラッグします。必要に応じて、ラベルを所定の位置にドラッグします。
    3. 一般的な「Label1」テキストの上にバックスペースを入れ、それを次のように置き換えます 最後の角度:
    4. テキストを右揃えするには、次の値を変更します TextAlign プロパティを3に設定します(fmTextAlignRight)。
      ヒント カーソルでダイアログボックスの要素をドラッグできますが、グリッドドットの間隔にジャンプする傾向があります。要素の位置を微調整するには、プロパティパレットの[位置]セクションを使用します。
      要素を上下に移動するにはTopの値を変更し、水平に移動するにはLeftの値を変更します。値は、ダイアログボックスの左上隅からのピクセル数を表します。
  7. コピーと貼り付けにより、他の2つのテキスト入力ボックスを作成できます。
    1. カーソルを使用して両方の要素を選択します。これを行うには2つの方法があります。
      • 両方の周りに長方形をドラッグできます。
      • または、どちらかを選択し、Ctrlキーを押しながら、もう一方を選択することもできます。
    2. 押す Ctrl + C (クリップボードに保存されている)コピーを作成します。
    3. 押す Ctrl + V コピーをダイアログボックスに貼り付けます。コピーは、残念ながらオリジナルの上に貼り付けられます。つまり、貼り付け後に、そのうちの1つを移動する必要があります。
    4. オリジナルの上にコピーをドラッグして、重なり合う要素を分離します。
  8. 新しいテキスト入力要素のペアのプロパティを変更します。
    • テキストラベルを 最後のポイント.
    • 変化する バックカラー テキストボックスの ウィンドウの背景 (白)、LastPointシステム変数の値はユーザーが変更できるため。
  9. の文言を編集 最後のプロンプト フィールド。 LastPromptシステム変数はユーザーが編集できないため、[最後のプロンプト]テキストボックスの背景色は灰色のままにします。
  10. 要素が完全に整列していない可能性があります。 VBAは、次のようにそれらを調整できます。
    1. 3つのテキスト要素を選択して、右クリックします。
    2. ショートカットメニューから、 権利。それらが完全に整列していることに注意してください。
    3. 3つの入力ボックスについて繰り返します。
  11. 最後の要素は[OK]ボタンと[キャンセル]ボタンです。ツールボックスから、 コマンドボタン 要素をユーザーフォームに追加します。
    左: CommandButtonツールを選択してから… 右: …それをフォームにドラッグします。
  12. Captionプロパティを OK.
  13. を繰り返して追加します キャンセル ボタン。

設計 ダイアログボックスの完了です。次の段階では、ダイアログボックスを動作させるコードを追加します。

必要に応じて、[OK]ボタンを狭くしたり、テキスト入力ボックスの周囲にフレームを追加したり、要素の色を変更したりすることで、ダイアログボックスの外観を微調整できます。 1L4Tがダイアログボックスの要素を整列させて見栄えをよくするため、DCLでの作業を好むのは興味深いことです。VBAによる手動の微調整は一切必要ありません。

コードを追加する

ダイアログボックスのデザインが整ったら、コードの作成を開始しましょう。 LISPでは、単一のルーチンがダイアログボックスで発生するすべてを処理します。対照的に、VBAは多くのコードスニペットを使用します。 1つのスニペットは[キャンセル]ボタンを処理し、もう1つのスニペットは[最後のポイント]テキストボックスに表示される値を処理します。

コードスニペットをダイアログボックスの要素にリンクすることについて心配する必要はありません。 VBAがそれを行います。ユーザーがテキストボックスまたは[OK]ボタンをクリックすると、VBAは正しいコードスニペットを自動的に実行します。

キャンセルをクリック

[キャンセル]ボタンをVBAコードにリンクするには、次の手順に従います。

  1. をダブルクリックします キャンセル ボタン。モジュールのようなフォームが表示され、部分的に入力されていることに注意してください。
  2. ダイアログボックスを閉じるコマンドを追加します。
    終わり
  3. 完了です!
  4. まあ、それだけではありません。それでも、[キャンセル]ボタンが実際に機能するかどうかをテストする必要があります。方法は次のとおりです。
    1. VBAツールバーで、 走る ボタン。ダイアログボックスがBricsCADで表示されることに注意してください。
    2. [OK]ボタンなど、[キャンセル]ボタン以外の要素をクリックしてみてください。関連付けられているコードがないため、何も起こりません。
    3. クリック キャンセル。ダイアログボックスが消えます。はい、うまくいきます!

VBAデータタイプの概要

データ・タイプ コメント の範囲
バイト 0 255
ブール 本当 誤り
整数 -32,768 32,767
長いです 長整数 -2,147,483,648 2,147,483,647
シングル 単精度浮動小数点 -3.402823E38 -1.401298E-45(負の値)
1.401298E-45 3.402823E38(正の値)
ダブル 倍精度浮動小数点 -1.79769313486231E308 -4.94065645841247E-324(負の値)
4.94065645841247E-324 1.79769313486232E308(正の値)
10進数 +/- 79,228,162,514,264,337,593,543,950,335(小数点なし)
+/- 7.9228162514264337593543950335(小数点以下28桁)
+/- 0.0000000000000000000000000001(最小のゼロ以外の数値)
日付 100年1月1日 9999年12月31日
通貨 スケーリングされた整数 -922,337,203,685,477.5808 922,337,203,685,477.5807
ストリング 可変長 0 約20億文字
固定長 1 約65,400文字
バリアント 数字 doubleまでの任意の数値
キャラクター 可変長文字列と同じ
オブジェクト オブジェクト参照
ユーザー定義の データ型と同じ範囲。

VBAデータ型の戻り値の概要

絶え間ない 説明
vbEmpty 0 空または初期化されていない
vbNull 1 ヌルまたは無効なデータ
vbInteger 2 整数
vbLong 3 長整数
vbSingle 4 単精度浮動小数点数
vbDouble 5 倍精度浮動小数点数
vbCurrency 6 通貨価値
vbDate 7 日付値
vbString 8 ストリング
vbObject 9 オブジェクト
vbError 10 エラー値
vbBoolean 11 ブール値
vbVariant 12 バリアント(配列)
vbDataObject 13 データアクセスオブジェクト
vbDecimal 14 10進数
vbByte 17 バイト値
vbUserDefinedType 36 バリアント(ユーザー定義型)
vbArray 8192 アレイ

VBAストリング操作の概要

キーワード、演算子 コメント
Asc、Chr ASCIIおよびANSI値にアクセスします
フォーマット、Lcase、Ucase 小文字または大文字に変換します
フォーマット 文字列をフォーマットします
InStr、Left、LTrim、Mid、Len 文字列の長さを検索します
LSet、Rset 文字列を左または右に揃えます
オプション比較 文字列比較ルールを設定します
右、RTrim、 文字列を操作します
スペース、文字列 繰り返し文字の文字列を作成します
StrComp 2つの文字列を比較します
StrConv 文字列を変換します
文字列を連結します

VBAプログラムコンポーネントの概要

プロジェクトはマクロを保存します。 (LISPはこれらを「プログラム」と呼びます。)

マクロとは、VBAプログラミングコードのチャンクを指します。 (LISPはこれらの「関数」を呼び出します。)VBAマクロは、埋め込む(図面に保存する)か、ディスク上の.dvbファイルに保存できます。

リアクタは、保存されている図面、図面に追加されたオブジェクト、マウスボタンのクリックなど、図面内のイベントに反応するマクロコードです。

フォームは、VBAコードが作成される場所を参照します。多くの場合、フォームはダイアログボックスのように見えます。

コントロールは、チェックボックスやドロップリストなどのフォームの要素を参照します。

クラスはオブジェクトの定義です。たとえば、AcadLineはラインエンティティを定義するクラスです。

オブジェクトとは、フォームに配置されたクラスを指します。オブジェクトは次の属性を持つことができます。

  • 色、高さ、幅など、オブジェクトを説明するプロパティ。
  • オブジェクトのコピーや回転など、オブジェクトを変更するメソッド。
  • オブジェクトが変更されたときに報告するイベント。

BRICSCADのVBAコマンドの概要

VBA関連のコマンド名は太字で下に表示され、同等のメニュー名は括弧内に表示されます。

メニュー項目にアクセスするには、ツール| VBAメニュー。

Vba(Visual Basic for Applications)は、マクロを記述およびデバッグするためのVBエディターを開きます。

VbaRun(マクロ)は、VBAマクロをロードして実行します。 [マクロ]ダイアログボックスを表示し、現在の図面に保存されているVBAマクロの名前を一覧表示します。

VbaNew(新しいプロジェクト)は、新しいVBAプロジェクトファイルの名前を指定します。

VbaLoad(プロジェクトのロード)は、.dvb VBAプロジェクトファイルをロードします。 [開く]ダイアログボックスを表示します。

-VbaLoadコマンドは、コマンドプロンプトで.dvbプロジェクトファイルをロードします。

VbaMan(Project Manager)は、VBA Managerダイアログボックスを表示します。

AddInMan(アドインマネージャ)は、BricsCADにロードできるプログラムをリストし、それらのロード方法を制御します。アドインマネージャダイアログボックスを表示します。

(VbaStmtはBricsCADではサポートされていません。他のプログラムでのその目的は、コマンドプロンプトでマクロを読み込んで実行することです。)

LastInput.Dvb

VBAプログラミングの紹介を後回しにして、完全にコード化されたプログラムを続けて調べてみましょう。以下は[最後の入力]ダイアログボックスで、見開きのページにはVBAコードがあります
LastInput.Dvbの場合。次のページでは、コードの一部についてコメントします。

プロジェクトの主要部分は色で示されています。他のモジュールは、メインモジュールをサポートするサブルーチンのようなものです。視覚的に分離したモジュールに行を追加し、色分けしました
モジュール名を相互参照できるようにします。

次のVBAコードは、BricsysのプログラマーであるFerdinand Janssensによって開発されました。

変換ルーチン

VBAはCADを考慮して設計されていないため、2Dおよび3Dポイントの処理など、ベクター描画に固有の概念を簡単に処理できません。 LISPと同様に、VBAは座標トリプレットを分離し、それらを文字列として再結合する必要があります。

Janssens氏のプログラムの2つの変換ルーチンは、BricsCADを使用するVBAプログラミングに役立ちます。これらは次のとおりです。

  • PointToString 3、2、1から「3」、「2」、「1」などの3Dポイント(x、y、z座標)を文字列に変換します。
  • StringToPoint 文字列を「3」、「2」、「1」から「3、2、1」などの1D、2D、または3D座標点に変換します。

率直に言って、VBAが単一の最も一般的なタイプのCADデータに対して引用符を追加および削除するために必要なコードの量に驚いています。幸いなことに、これら2つのルーチンを作成すると、他のVBAプログラムでそれらを繰り返し使用できるようになります。

ここでは、それらがどのように機能するかについて説明します。

POINTTOSTRING変換関数

PointToStringルーチンは、引用符を各座標に追加して、実数から文字列に変換します。たとえば、3.4,2,0は「3.4」、「2」、「1」になります。次のようになります。

プライベート機能 PointToString(vIn バリアントとして) 文字列として

薄暗い sPt 文字列として:sPt = vbNullString     薄暗い

iPrecision 整数として

iPrecision = ThisDrawing.GetVariable(“ LUPREC”)

もし VarType(vIn)> vbArray その後

sPt = StringFromValueFixedDecimal(vIn(0)、iPrecision)&“、“

sPt = sPt&StringFromValueFixedDecimal(vIn(1)、iPrecision)&“、“

sPt = sPt&StringFromValueFixedDecimal(vIn(2)、iPrecision)

終了する場合

PointToString = sPt

終了機能

(VBAキーワードは 太字.)

このコードがどのように機能するかを1行ずつ調べてみましょう。

プライベート関数PointToString(vIn As Variant)As String

民間 このモジュール内でのみ関数にアクセスできることを意味します。これは、(defun function(/ vaname))のように、変数名をスラッシュ文字の後に置いてローカルにするためのLISPの慣例とほぼ同じです。

関数 名前、引数、およびコードを指定します。それは Defun LISPの関数。

PointToString 関数の名前です。

vIn 引数の変数の名前です(vIn は「バリアント入力」の略です)。この変数の目的は、処理時にこの関数に渡される引数を受け取ることです。

なので 引数のデータ型を宣言します。

バリアント はデータ型です。つまり、データ型に関しては、関数は完全に柔軟であり、数値、テキスト、および配列を操作します。

文字列として 関数の出力が可変長文字列であることを意味します。

要約すれば、 このコード行は、数値またはテキストを入力として受け取り、テキストを返す「PointToString」というローカル関数を定義します。


VBAの事前定義された定数の概要

絶え間ない コメント
vbCrLf Chr(13)+ Chr(10) キャリッジリターン、ラインフィード
vbCr Chr(13) キャリッジリターン
vbLf Chr(10) 改行
vbNewLine Chr(13)+ Chr(10) 改行文字(\ n)
vbNullChar Chr(0) 値0の文字
vbNullString 0 値0の文字列。外部手順に使用
vbObjectError -2147221504 大きい値はユーザー定義のエラー番号です
vbTab Chr(9) タブ(\ t)
vbBack Chr(8) バックスペース

Dim sPt As String:sPt = vbNullString

薄暗い 変数名を宣言する最も一般的な方法です。 LISPとは異なり、VBAは事前に変数の名前とそのデータ型を知っている必要があります。経験豊富なLISPプログラマーの宣言は不要な追加作業のように思えますが、この事前の宣言は、VISPルーチンがLISPで記述されたものよりも高速に実行される方法の1つです。

sPt 変数の名前です(sPt は「文字列ポイント」の略です)。

なので データ型を宣言するためのキーワードです。

ストリング データ型です。

: (コロン)は、行ラベルの終わりを示します。 sPtには初期値が与えられます。

vbNullString は、VBAの定義済み定数の1つです。これは、piがLISPで3.1431…として定義されているのと同じです。 vbNullStringの値は0です(長さがゼロの文字列「」とは異なります)。これは、LastPointに何も含まれていないときにダイアログボックスに最初は0が表示されるようにするためです。

要約すれば、このコード行は、「sPt」という名前の変数を定義し、それに値0を割り当てます。

整数としてのDim iPrecision

iPrecision 別の変数の名前です(「整数精度」の略)。その目的は、この関数で使用される小数点以下の桁数を指定することです。

整数として 整数は小数点以下の値を保持するのに十分な大きさがあるため、そのデータ型を整数として定義します。BricsCADでは0から8の範囲です。

要約すれば、このコード行では、「iPrecision」という名前の変数を定義しています。

iPrecision = ThisDrawing.GetVariable(“ LUPREC”)

ThisDrawing VBAが現在の図面からデータにアクセスする方法です—その名前を知る必要はありません。

GetVariable システム変数の値を取得し、現在の図面の値を取得します。

これは、LISPの(getvar)関数の使用に似ています。

  LuPrec」は、現在の線形単位の精度([設定]ダイアログボックスで設定)の値を格納するシステム変数の名前です。 LuPrecはBricsCADの名前で、VBAとは関係ありません。つまり、同じコード行を使用して、BricsCADに固有の値を含め、任意のシステム変数の値にアクセスできます。

要約すれば、 このコード行は、システム変数LuPrecの値を取得し、それをiPrecisionに格納します。

If VarType(vIn)> vbArray Then

もし すべてのプログラミング言語で見られる通常のif-then意思決定構造を開始します。 (もし 「if-then」構造はありません。 その後 これらはプログラミング言語ではありません。)この場合、ifはvInの値をチェックします。

VarType 変数のデータ型を決定する関数です。データ型を報告する整数を返します。データ型がわかったら、他の作業を実行できます。この場合、vInのデータ型をチェックします。

> はより大きい関数です。

vbArray 別のVBA定数です。これは8192の値を保持します。ただし、配列タイプは、配列のタイプを報告するために、常に8192より大きい値を返します。配列は、数値、テキスト、ブールなどで構成できます。このプログラムでは、配列は1,2,3などの座標トリプレットです。

要約すれば、 このコード行では、vInのデータ型が配列であるかどうかを確認します。具体的には、「vInの値は8192より大きいですか?もしそうなら、それは配列であり、処理を続行できます。」

sPt = StringFromValueFixedDecimal(vIn(0)、iPrecision)&“、“

StringFromValueFixedDecimal 10進数を文字列に変換し、小数点の数をシミュレートするユーザー定義関数です。 (それは少し後でリストされています LastPoint.Dvb プログラム)2つの引数が必要です:10進数と精度(つまり、表示する小数点の数)。

vIn(0) 配列vInの最初の値を抽出します。うん、VBAはLISPと同じように0を#1と見なします。 vInが3.2,2,0の場合、3.2が抽出されます。

iPrecision 小数点の数を指定します。たとえば、vIn(0)が3.2の場合、これは
関数は、「3.2000」(iPrecisionが4の場合)または「3」(iPrecisionが0の場合)に変更します。

文字列を連結(リンク)するためのVBAの関数です。
LISPのStrCat関数。

“, “ 文字列に連結され、sPtの値が保持されます。
“3.2000, “.

要約すれば、このコード行は、座標配列の最初の要素を固定小数点数の文字列に変換し、コンマとスペースを追加します。

sPt = sPt&StringFromValueFixedDecimal(vIn(1)、iPrecision)&“、“

このコード行は上記のものと同じですが、2つの違いがあります。

sPt = sPt& sPtの既存の値(“ 3.2000、“)を配列から抽出された2番目の値と連結します。

StringFromValueFixedDecimal(vIn(1) 配列から2番目の要素を抽出します。

要約すれば、 このコード行は、座標配列の2番目の要素を文字列に変換し、それを最初の要素に連結します。 sPtは「3.2000、2.0000、」を保持するようになりました。数値配列が部分ごとに文字列配列に変換される様子を確認できます。

sPt = sPt&StringFromValueFixedDecimal(vIn(2)、iPrecision)

このプロセスが繰り返され、sPtは文字列「3.2000、2.0000、0.000」を保持します。

終了する場合

終わり セクションの終わりを示します。

もし if-thenステートメントの終了を示します。 vInが配列でなかった場合、ルーチンは前の3行のコードをスキップし、ここにジャンプします。この場合、sPtが保持する値を推測できますか?

PointToString = sPt

sPtの値はPointToStringに割り当てられ、他のコード行からアクセスできます。 (vInが配列でなかった場合、sPtの値は0になります。)

終了機能

終わり モジュールの終わりを指定します。

 関数 関数が終了したことを示します。これはサブルーチンなので、PointToStringの値はコードのメイン部分に返され、次のステートメントで使用されます。

Me.txtLastPoint.Text = PointToString(vLastpoint)

STRINGTOPOINT変換関数

StringToPointルーチンは、各文字列から引用符を削除して、それを実数に変換します。たとえば、「3.4、2、0」は3.42,0になります。一部のコードは、上から見覚えがあります。

プライベート機能 StringToPoint(sIn 文字列として) バリアントとして

薄暗い sCoords() 文字列として:sCoords = Strings.Split(sIn、“、”)

薄暗い tmpPt(0から2) ダブルとして

もし UBound(sCoords)= 0 その後

tmpPt(0)= Val(sCoords(0))

ElseIf UBound(sCoords)= 1 その後

tmpPt(0)= Val(sCoords(0))

tmpPt(1)= Val(sCoords(1))

ElseIf UBound(sCoords)= 2 その後

tmpPt(0)= Val(sCoords(0))

tmpPt(1)= Val(sCoords(1))

tmpPt(2)= Val(sCoords(2))

終了する場合     StringToPoint = tmpPt

終了機能

このコードの一部が何をするかを調べてみましょう:

Dim sCoords()As String:sCoords = Strings.Split(sIn、“、”)

Dim sCoords()As String 変数sCoords(「文字列座標」でソート)を定義し、データ型Stringを割り当てます。

スプリット 文字列を、指定された数の部分文字列を持つ1次元配列に分割します。

“,” 区切り文字を指定します。これは、分割する場所をSplitに指示します。この場合、「3.4、2、0」のような文字列は「3.4」、「2」、「0」になります。

UBound(sCoords)= 0の場合

UBound 配列のサイズを報告します。これは、関数が2次元座標(2要素配列)を処理しているか、3次元(3要素配列)を処理しているかを判断するのに役立ちます。

tmpPt(0)= Val(sCoords(0))

ヴァル 文字列内の数値を数値として変換します。つまり、「3.4」は3.4になります。

このサブルーチンは、txtLastPoint_BeforeUpdate関数によって使用されます。

LASTINPUT.DVBのロードと実行

あなたはダウンロードすることができます LastInput.Dvb からのファイル 私のDropboxアカウント.

次の手順に従ってプログラムをロードします。

  1. BricsCADを起動します。
  2. から 道具 メニュー、選択 VBA、次に選択 プロジェクトを読み込む.
  3. [開く]ダイアログボックスで[LastPoint.Dvb]を選択し、 開いた。これでプログラムがBricsCADにロードされました。
    ([セキュリティ]ダイアログボックスが表示されたら、 、次にクリック OK.)

プログラムを実行するには、次の手順に従います。

  1. から 道具 メニュー、選択 VBA、次に選択 マクロ.
  2. [BricsCAD VBAマクロの実行]ダイアログボックスで、「Module1.main」を選択します。
  3. クリック 走る.
    [最後の入力]ダイアログボックスが表示されます。図面が新品の場合(オブジェクトの描画なし)、フィールドは0を報告します。
  4. 作業中のダイアログボックスを表示するには、[線分]コマンドを開始して、数本の線を描きます。 (このダイアログボックスはモデルではないため、BricsCADで他のコマンドを実行しても開いたままになります。)
  5. クリック 更新 ダイアログボックスが最後の点、角度、プロンプトの値を報告することを確認します。
  6. 最終ポイントの値を変更するには、座標を強調表示してから、x、y、zに異なる値を入力します。
  7. 完了したら、クリックします OK。ダイアログボックスが消えます。
  8. 押す ESC Lineコマンドをキャンセルします。
ヒント VBAプロジェクトをツールバーまたはメニューマクロに含めるには、-VbaRunコマンドを使用して、マクロ名を引数として指定します。

VBA変数宣言のクイックサマリー

宣言 コメント
薄暗い 変数を宣言するデフォルトの方法:
Dimがプロシージャ内に表示されると、変数が使用可能になります
手順内のみ
Dimがモジュールの宣言セクションにある場合、変数はモジュール内のすべてのプロシージャで使用できますが、
プロジェクトの他のモジュール
公衆 プロジェクト内のすべてのモジュールのすべてのプロシージャで変数を使用できるようにします
民間 同じモジュール内のプロシージャのみが使用できるように変数を制限します
静的 変数は呼び出し間で値を保持します
オプション明示的 すべての変数はモジュール内で明示的に宣言する必要があります

VBAショートカットリファレンスの概要

期間 コメント
この 現在またはアクティブなBricsCADドキュメントを参照します
わたし クラスモジュール内のすべてのプロシージャで変数を使用できるようにします。クラスに複数のインスタンスがある場合に使用されます。Meは現在実行されているコード内のクラスのインスタンスを参照するためです

BricsCAD体験版を
ダウンロード

今すぐBricsCADを使ってみましょう

多言語、広範囲で使える永久ライセンスとサブスクリプションです。


  1. 前書き
  2. BricsCADユーザーのための55のヒント
  3. 設定
  4. 環境を変える
  5. カスタムユーザーインターフェース
  6. [カスタマイズ]ダイアログボックスの概要
  7. メニューバーとコンテキストメニューをカスタマイズする
  8. ツールバーとボタンアイコン
  9. マクロとディーゼルコードの記述
  10. リボンのタブとパネル
  11. キーストロークのショートカット、エイリアス、シェルコマンド
  12. マウス、ダブルクリック、タブレットボタン
  13. クワッドについて知っておくべきすべてのこと
  14. ロールオーバープロパティ
  15. ワークスペースとユーザーインターフェイス
  16. 設計ツールと構造パネル
  17. シンプルで複雑な線種の作成
  18. ハッチングのパターン化
  19. 形状とフォントのデコード
  20. フィールドテキストでのコーディング
  21. スクリプトを書く
  22. LISPによるプログラミング(はじめに)
  23. LISP関数
  24. 簡単なLISPプログラムを書く
  25. LISPプログラミングの7つのヒント
  26. DCLを使用したダイアログボックスの設計