忍者ブログ

[PR]

2025年07月04日
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

シェイプ一覧を出力するマクロ

2021年10月06日
前回の構成図自動結線マクロ(その5)で書いた通り
結線図をもとに結線表を作るには、正しく結線図を描いていて
さらにシェイプの名称も正しく設定していないといけない。

でも、結線図からそれを判断するのは大変なので、
デバッグ用にシェイプ一覧を取得するマクロを作った。

こっちを掘り下げた方が色々使い道がありそうなので、
ひとまずできたところまででアップすることにした。


マクロの構成は簡単。

すべてのオートシェイプをループで選択して
名称やらテキストやらをセルに出力するだけ。

ついでに文字の色や線の色、塗りつぶしの色をRGBで取得したり
シェイプの枠線を出力先のセルにそれっぽく出したり。

変更を加える作業については、マクロで実行するとUnDoが使えないので、
マクロで様々な条件のシェイプを選択できると便利かなー。(将来対応)


●まずは全シェイプをループさせるところ。
For Each Shp In ActiveSheet.Shapes
'Shp(Shape型変数)に対する処理
Next Shp

ちなみにActiveSheet.Shapesはドロップダウンリストも対象になるようで、
すべてのシェイプを消すような処理をすると、ドロップダウンリストも消えるとか。

https://excel-ubara.com/excelvba4/EXCEL241.html

For Eachの前にActiveSheet.Shapes.SelectAllで全選択して、
ActiveSheet.ShapesをSelection.shapeRangeにすれば大丈夫っぽい。


●辞書変数ポインタを使ったセル格納
出力列の入れ替えをできるように、辞書型の変数を定義して
列名をキーに、列番号を辞書登録してみた。

辞書登録する部分の順番を入れ替えれば出力列が入れ替わる。

セルに出力する部分は一旦配列に格納したほうがいいんだけど、
もうめんどい。


●枠線の設定
今回一番苦労したのがここ。

オートシェイプとセルで枠線の仕様が違う。
セルは枠線の種類と太さの組み合わせが決まっていて
許容されない組み合わせを設定すると、先に設定した値が自動的修正されてしまう。

Function LDS2BL(LDS As Long)では、オートシェイプの枠線の線種をセルの枠線の線種へ
プロパティ値を変換する関数。

ただ、セルの線種は線の太さとの組み合わせで定義されている部分があるので、
出力値を2桁にして無理やり対応した。

●シート名について
個人利用のため、Worksheets("接続図")のシェイプを
Worksheets("シェイプリスト")に出力する仕様にした。

汎用性を持たせるなら、
選択シートの内容を追加したシートに出力するかな。


●出力イメージ
イメージがつかめるように、出力結果シートに接続図をコピペ。



当初をRGBの値のセルを色に合わせて制御したけど、
テキストを出力したセルを制御する方針に変更。
そしたらRGBの値いらないか。。。


すごいざっくりとした説明だけど、以下ソース。
PR
つづきはこちら "シェイプ一覧を出力するマクロ"

構成図自動結線マクロ(その5)

2021年10月06日
今回もオートシェープの自動結線マクロの話。

実際に使ってみたらいろいろと問題発生。

1.1つ目に選択したシェイプから放射状に結線する仕様だけど、
物理構成図はLANポートなんだから、1つのポートに線1本しか繋がらないじゃん!
→前半に選択したシェイプから後半に選択したシェイプへそれぞれ線を引く仕様に変更。




2.ユーザーフォームは作らない想定だったけど、
図が大きくなると用意したボタンが遠いし、
オブジェクト選択モードでボタンをクリックしてもマクロが発動しない。

→仕方なくユーザーフォームを作成。
ただ、ボタンを並べるだけのフォームなら工数はそれほど時間はかからないことがわかった。

一旦作っちゃうと、あれこれ凝りだしてコリコリのフォームが出来上がる。。。
ちゃんと設計していないから、上部と下部で用途違うし。


上段のコネクタ作成については、
これまでモジュールで分けていた部分をラジオボタンの値判定で振り分ける処理に。

TextControl部分がこだわった個所。
ポートに通番やよく使う番号を振ったり、固定テキストを入力できるようにした。

また、ウィンドウを閉じたときも入力した文字を保持するように
ユーザーフォームをアンロードせずに隠す仕様へ。

Exitボタン押下時の処理をUnload Me から Me.Hide へ変更。

また、ExitボタンのCancelプロパティをTrueに設定すると、
ExitボタンがESCキーに割り当てられる。(ESCキーで閉じれる)


フォームの下段は、オートシェープの名前制御部分。

最初は名前を重複させたらエラーになると思っていたけど、
順序情報(背面から表面に向かって通番)で管理しているっぽい。

シェイプの名前をフォームから入力または表示されているテキストに変更する。

MakeConnectionListは、
マクロで作成したコネクタ(特別な名前を設定)に対して、
両端のシェイプ名をリスト化するマクロ。



さあ、これで完成と思いきや、そうは問屋が卸さない。


実際に図を描くときは、マクロを使う場合とコネクタをコピペする場合があるし、
シェイプを正しく設定できていなかったり、コネクタが未接続だったりする。


じゃあ、シェイプの一覧を表示するマクロ。
いや、表示するなら名前やテキストを置換したいし、
一括で線の幅とか塗りつぶしとか変更したい。

夢膨らみまくりで発散。


次回へ続く。以下、ソース。
つづきはこちら "構成図自動結線マクロ(その5)"

VBAプロパティのオプション値について

2021年09月28日
前回投稿のオートシェイプ について書きたいところだけど、ソースコードの修正が終わらず。

今日は、その作業中に気づいたプロパティオプション値の確認方法について。
つづきはこちら "VBAプロパティのオプション値について"

構成図自動結線マクロ(その4)一括削除と1つ削除

2021年09月21日
今回もオートシェープの自動結線マクロの話。

挿入したコネクタがイメージと違ったなんてことよくある。
一括で挿入したものを1つずつ消すのは辛い。

手動操作ならUnDo(Ctrl+z)が効くが、マクロだと戻せないので
削除機能を実装してみた。

現在選択中のオブジェクトがいくつあるから・・・なんで複数なことをやろうとしたけど、
名称に設定した通番の最大値をもつオブジェクトを調べて消すだけじゃん。

通番管理でコネクタの挿入処理は複雑になったけど、しゃーない。

名称は、 "myCn_" で始まるように統一したので、"myCn_"を含むオブジェクトを全削除する機能も実装。


ちなみにオートシェープの一覧はAlt+F10で確認ができる。




以下、ソース。
つづきはこちら "構成図自動結線マクロ(その4)一括削除と1つ削除"

構成図自動結線マクロ(その3)コネクタの調整

2021年09月20日
今回もオートシェープの自動結線マクロの話。

結線することはできたけど、鍵コネクタでつなぐと線が重なって見えない。
これだと困るのでコネクタの形状を調整するマクロを作った。

アジャストは
shp.Adjustments.Item(1) = 0~1で指定するらしい。

コネクタの場合、線分のどの位置で折り曲がるかを設定する。
初期値は0.5で、ちょうどまんなかで鍵型になる。


やりたいことは、複数選択したコネクタで曲げる位置をずらす。
初期のアジャスト位置に対して、コネクタ番号×5%でずらす仕様に。

試してみると、50~80%にコネクタが集まるので、全体を手前にずらすことも必要とわかった。

で、番号順にずらす機能と全体をそのままずらす機能を±両方向へ設定可能にした。

Const adjustNum = 5 / 100 'アジャスタの分母 小さい方がずれる
shp.Adjustments.Item(1) = shp.Adjustments.Item(1) ± i * adjustNum
iを1に変更すれば全体がシフトする。



こんな感じ


以下、ソース。
つづきはこちら "構成図自動結線マクロ(その3)コネクタの調整"