構成図自動結線マクロ(その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に変更すれば全体がシフトする。
こんな感じ
以下、ソース。
結線することはできたけど、鍵コネクタでつなぐと線が重なって見えない。
これだと困るのでコネクタの形状を調整するマクロを作った。
アジャストは
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に変更すれば全体がシフトする。
こんな感じ
以下、ソース。
PR
構成図自動結線マクロ(その2)接続点の変更
2021年09月20日
前回、オートシェープの自動結線するマクロを作った。
ブログのアップにあたって手直ししたけど、
初回バージョンは上から下に線を引く想定だったので
こんな残念な結合点に。
で、始点と終点の接続点を回転できると便利そうなので作った。
コネクタを選択した状態で、
「始点を回転」、「終点を回転」ボタンをクリックすると
コネクタの接続点が反時計回りに回転する。
【回転前】
【回転後】
前回も触れたけど、鍵コネクタの接続点のオートシェープ名が取得できず苦戦。
わかってしまえばなんてことないのにね。
参考ページ(Edgeのコレクション機能便利だわ・・・)
https://infoment.hatenablog.com/entry/2018/09/21/072707
https://vba-andmore.hatenablog.com/entry/2016/05/11/220000
以下、ソース。
ブログのアップにあたって手直ししたけど、
初回バージョンは上から下に線を引く想定だったので
こんな残念な結合点に。
で、始点と終点の接続点を回転できると便利そうなので作った。
コネクタを選択した状態で、
「始点を回転」、「終点を回転」ボタンをクリックすると
コネクタの接続点が反時計回りに回転する。
【回転前】
【回転後】
前回も触れたけど、鍵コネクタの接続点のオートシェープ名が取得できず苦戦。
わかってしまえばなんてことないのにね。
参考ページ(Edgeのコレクション機能便利だわ・・・)
https://infoment.hatenablog.com/entry/2018/09/21/072707
https://vba-andmore.hatenablog.com/entry/2016/05/11/220000
以下、ソース。
構成図自動結線マクロ(その1)
2021年09月20日
構成図自動結線マクロ(その1)
会社の同僚がエクセルを使って物理構成図を作成していた。
接続するLANポートをオートシェープで作って、そこに番号を振る。
そして、ポート同士を直線コネクタや鍵コネクタで接続する。
LANケーブル90本も引くのに、手作業は辛すぎないか・・・?
しかも、LANポートの位置をずらすと鍵コネクタのアジャスタが
初期化されて動かせず。
これはやばすぎる!!ってことでオートシェープ関係について調べてみた。
まずは物理構成図の基本をチェック。
https://shigotoswitch.com/?p=1231
確かにオブジェクト選択とセルに合わせるボタンを用意しとくと便利。
次に見つけたのがこれ。★
http://blog.livedoor.jp/qoozy/archives/52567093.html
複数のオートシェープを選択してマクロを実行すると、
1つ目に選択したシェイプから2~n番目のシェイプに線を引いてくれる。
これは素晴らしい!!
ソースも書いてあるので、流用させてもらうことにした。
ここでやりたいことの整理。
1.構成図を書くうえで、結線を簡単に描きたい。
2.完成した構成図から結線リストを作成したい。
3.鍵コネクタの線が重なるのを避けたい。
4.なるべく汎用性を持たせるために、修正や取り消しをしたい。
大体こんな感じ。
1については、上記のページを流用すればOK。
2は、コネクタを接続したときに両端のオブジェクトの名前を取得できればいけそう。
3は余力があれば。。。
さっそく★ページのソースを流用してつくってみた。
With ActiveSheet.Shapes.AddConnector の部分で仮のコネクタを作成する。
以下のメソッドで始点と終点のオブジェクトおよび接続箇所を指定。
.ConnectorFormat.BeginConnect Selection.ShapeRange(1), 3 '最初にクリックしたものから
.ConnectorFormat.EndConnect Selection.ShapeRange(i), 1
後々ハマったんだけど、「Selection.ShapeRange(1)」で指定するのはいまいちで
コネクタの接続点の図形名称を取得できなくなる。
【修正前】For i = 1 To Selection.ShapeRange.CountのSelection.ShapeRange(i)
【修正後】For Each shp In Selection.ShapeRangeのshp(shpはShapeオブジェクト)
カンマの後の数値が接続点で、1:上、2:左、3:下、4:右 だった。
今回は、下から上に接続で固定。
.RerouteConnectionsを指定すると、接続点を自動判定してくれるけど
修正が大変になるので使用見送り。
2つのオブジェクトでSelection.ShapeRange(i).Topを比較して決定した。
今回は長くなるのでいったん終了。
引く線は、直線コネクタと鍵コネクタと曲線コネクタの3種類を用意。
With ActiveSheet.Shapes.AddConnector(線種, 0, 0, 0, 0)で
線種を変更すればいいんだけど、withの中身だったのでうまくパラメータ化できず
ださい作りになってしまった。
他の部分はせめてパラメータ化しないとと思って直してたら
コネクタ種類の数値オプションあんじゃん。自作の受け渡しの値と同じだし。
終盤に出てくるオブジェクト名の命名や冒頭に出てくるmaxNumの計算は
自作したコネクタのやり直しマクロへの布石。
オリジナルの名称と通番を振っておけば、けつから順に削除できる。
(UnDoを作るつもりだったけど、1つだけ消すほうが簡単で便利だった。)
NameArrayは、終了時に挿入したコネクタを選択状態にしたかったから用意。
結果はこんな感じ。
【実行前】FWのLポートを最初に選択。
【実行後】FWのLポートから各ポートにコネクタを作成。
以下、ソース。
会社の同僚がエクセルを使って物理構成図を作成していた。
接続するLANポートをオートシェープで作って、そこに番号を振る。
そして、ポート同士を直線コネクタや鍵コネクタで接続する。
LANケーブル90本も引くのに、手作業は辛すぎないか・・・?
しかも、LANポートの位置をずらすと鍵コネクタのアジャスタが
初期化されて動かせず。
これはやばすぎる!!ってことでオートシェープ関係について調べてみた。
まずは物理構成図の基本をチェック。
https://shigotoswitch.com/?p=1231
確かにオブジェクト選択とセルに合わせるボタンを用意しとくと便利。
次に見つけたのがこれ。★
http://blog.livedoor.jp/qoozy/archives/52567093.html
複数のオートシェープを選択してマクロを実行すると、
1つ目に選択したシェイプから2~n番目のシェイプに線を引いてくれる。
これは素晴らしい!!
ソースも書いてあるので、流用させてもらうことにした。
ここでやりたいことの整理。
1.構成図を書くうえで、結線を簡単に描きたい。
2.完成した構成図から結線リストを作成したい。
3.鍵コネクタの線が重なるのを避けたい。
4.なるべく汎用性を持たせるために、修正や取り消しをしたい。
大体こんな感じ。
1については、上記のページを流用すればOK。
2は、コネクタを接続したときに両端のオブジェクトの名前を取得できればいけそう。
3は余力があれば。。。
さっそく★ページのソースを流用してつくってみた。
With ActiveSheet.Shapes.AddConnector の部分で仮のコネクタを作成する。
以下のメソッドで始点と終点のオブジェクトおよび接続箇所を指定。
.ConnectorFormat.BeginConnect Selection.ShapeRange(1), 3 '最初にクリックしたものから
.ConnectorFormat.EndConnect Selection.ShapeRange(i), 1
後々ハマったんだけど、「Selection.ShapeRange(1)」で指定するのはいまいちで
コネクタの接続点の図形名称を取得できなくなる。
【修正前】For i = 1 To Selection.ShapeRange.CountのSelection.ShapeRange(i)
【修正後】For Each shp In Selection.ShapeRangeのshp(shpはShapeオブジェクト)
カンマの後の数値が接続点で、1:上、2:左、3:下、4:右 だった。
今回は、下から上に接続で固定。
.RerouteConnectionsを指定すると、接続点を自動判定してくれるけど
修正が大変になるので使用見送り。
2つのオブジェクトでSelection.ShapeRange(i).Topを比較して決定した。
今回は長くなるのでいったん終了。
引く線は、直線コネクタと鍵コネクタと曲線コネクタの3種類を用意。
With ActiveSheet.Shapes.AddConnector(線種, 0, 0, 0, 0)で
線種を変更すればいいんだけど、withの中身だったのでうまくパラメータ化できず
ださい作りになってしまった。
他の部分はせめてパラメータ化しないとと思って直してたら
コネクタ種類の数値オプションあんじゃん。自作の受け渡しの値と同じだし。
終盤に出てくるオブジェクト名の命名や冒頭に出てくるmaxNumの計算は
自作したコネクタのやり直しマクロへの布石。
オリジナルの名称と通番を振っておけば、けつから順に削除できる。
(UnDoを作るつもりだったけど、1つだけ消すほうが簡単で便利だった。)
NameArrayは、終了時に挿入したコネクタを選択状態にしたかったから用意。
結果はこんな感じ。
【実行前】FWのLポートを最初に選択。
【実行後】FWのLポートから各ポートにコネクタを作成。
以下、ソース。
Dirコマンドの取得結果を整理するVBScript
2021年08月31日
Dirコマンドの取得結果をdir /s /b風に整理するVBScript
元々、Dirコマンドを使ってフォルダ内のファイル一覧を取得して、
エクセルを使って解析していたんだけど、
何をするにもエクセルでマクロを動かしてからだと使い勝手も悪いし、
他のエクセルを使った業務ができなくなるので
VBScriptに外だしすることにした。
エクセルバージョンはこちら
https://aki.p-kin.net/Entry/10/
※ 不具合修正。環境によってファイルサイズの末尾に「バイト」が付く場合があるので、
fSize = Trim(Replace(Mid(buf, 19, 16),"バイト",""))とするのが良いかも。
おさらい
コマンドプロンプトで以下コマンドを打つと、フォルダ内のファイル一覧を取得できる。
> Dir フォルダ名
このコマンドのよく使うオプションはこちら
/s:サブフォルダを対象にする
/a-d:ファイルのみを対象にする
/b :フルパスのファイル名のみ取得する
> ファイル名:指定したファイルに結果を上書きする
>> ファイル名:指定したファイルに結果をアペンドする
/b形式は加工しやすいけど、ファイルのサイズや更新日時を取りたい。。。
というわけで、「Dir /s /a-d フォルダ名 > ファイル名 」のコマンドで取得して、
ドラッグドロップすると/b形式に変換するVBScript。
それにしても、VBScriptはデバッグしにくいなー。
ソースの中身をテキストファイルにコピペして、.VBSの拡張子で保存。
Dir /s /a-dの結果をドラッグドロップすると、/bっぽく整理して出力。
ファイルサイズの出力等の設定をオプション定数に出した。
以下、ソース。
元々、Dirコマンドを使ってフォルダ内のファイル一覧を取得して、
エクセルを使って解析していたんだけど、
何をするにもエクセルでマクロを動かしてからだと使い勝手も悪いし、
他のエクセルを使った業務ができなくなるので
VBScriptに外だしすることにした。
エクセルバージョンはこちら
https://aki.p-kin.net/Entry/10/
※ 不具合修正。環境によってファイルサイズの末尾に「バイト」が付く場合があるので、
fSize = Trim(Replace(Mid(buf, 19, 16),"バイト",""))とするのが良いかも。
おさらい
コマンドプロンプトで以下コマンドを打つと、フォルダ内のファイル一覧を取得できる。
> Dir フォルダ名
このコマンドのよく使うオプションはこちら
/s:サブフォルダを対象にする
/a-d:ファイルのみを対象にする
/b :フルパスのファイル名のみ取得する
> ファイル名:指定したファイルに結果を上書きする
>> ファイル名:指定したファイルに結果をアペンドする
/b形式は加工しやすいけど、ファイルのサイズや更新日時を取りたい。。。
というわけで、「Dir /s /a-d フォルダ名 > ファイル名 」のコマンドで取得して、
ドラッグドロップすると/b形式に変換するVBScript。
それにしても、VBScriptはデバッグしにくいなー。
ソースの中身をテキストファイルにコピペして、.VBSの拡張子で保存。
Dir /s /a-dの結果をドラッグドロップすると、/bっぽく整理して出力。
ファイルサイズの出力等の設定をオプション定数に出した。
以下、ソース。
UiPathのメモリリーク対策 追加開発
2021年08月17日
前回、ロボット実行プロセス「UiPath.Executor.exe」が
メモリを掴んだまま落ちる対策を書いた。
https://aki.p-kin.net/Entry/66/
ループ内で呼ばれるモジュールを分離して
別の「UiPath.Executor.exe」で実行することで
メモリを解放することができるようになった。
ところが、依然としてループを回しているプロセスで
1日50メガずつメモリを食っている。
今回は、この対策について。
メモリを掴んだまま落ちる対策を書いた。
https://aki.p-kin.net/Entry/66/
ループ内で呼ばれるモジュールを分離して
別の「UiPath.Executor.exe」で実行することで
メモリを解放することができるようになった。
ところが、依然としてループを回しているプロセスで
1日50メガずつメモリを食っている。
今回は、この対策について。