業務効率化

PAD:エキスプローラ-/フォルダOpen判断フロー

PADで新しくフォルダを開いた時に、その最後に開いたフォルダパスを取得し、処理を進めるマクロです。既定メソッドではUI操作等で可能ですが、動作の遅延や安定性が無いためPSにより情報を取得しています。安定的にフォルダ開閉の判断が可能になり、フォルダ開きを伴うフローで活用できます。

記事の内容

・挙動

・コード

・ポイント機能

・挙動

冒頭で現在のエキスプローラを取得します。取得値は比較用のBefPathsとAftPathsに格納されます。

取得値はテーブル型として取得されます。

その後両変数の長さを比較対象とし、AftPathsが増加した場合は新しいエキスプローラが開いたと判断しループを終了します。

最後に開いたフォルダーを操作するため、後半ではまずテーブル型を行ごとに分割してリスト化します。リストではこのリスト変数の.countプロパティにより最終行の値を取得しますが、なぜか空欄が最終行に存在するため、ー2をしています。

・コード

➤コードはこちら
**REGION Fd開くまでループ
Scripting.RunPowershellScript.RunScript Script: $'''$shell = New-Object -ComObject Shell.Application
$shell.Windows() |
Where-Object { $_.Name -eq \"エクスプローラー\" } |
ForEach-Object {
    $_.Document.Folder.Self.Path
}
''' ScriptOutput=> BefPaths
Scripting.RunPowershellScript.RunScript Script: $'''$shell = New-Object -ComObject Shell.Application
$shell.Windows() |
Where-Object { $_.Name -eq \"エクスプローラー\" } |
ForEach-Object {
    $_.Document.Folder.Self.Path
}
''' ScriptOutput=> AftPaths
LOOP WHILE (AftPaths.Length) <= (BefPaths.Length)
    Scripting.RunPowershellScript.RunScript Script: $'''$shell = New-Object -ComObject Shell.Application
$shell.Windows() |
Where-Object { $_.Name -eq \"エクスプローラー\" } |
ForEach-Object {
    $_.Document.Folder.Self.Path
}
''' ScriptOutput=> AftPaths
END
Text.SplitText.Split Text: AftPaths StandardDelimiter: Text.StandardDelimiter.NewLine DelimiterTimes: 1 Result=> AftPathsList
SET Trg_Folder TO AftPathsList[AftPathsList.Count - 2]
**ENDREGION

・ポイント機能

・PSによるエキスプローラ/フォルダパス取得

・リスト化による最終パス取得

PSによるエキスプローラ/フォルダパス取得

PSではオブジェクトでエキスプローラ(フォルダ)であるもののパスを取得します。

取得した値は、テーブル型変数として取得されます。

リスト化による最終パス取得

テーブル型に入ったパスは[]によって値を指定取得可能ですが、一行のすべてのパス取得ができません。そのためリスト型として再度取得し、行指定でフルパスを取得できるようにします。

全部で3つ開いているAftPathsListをリスト型にすると、リストに空欄を再終業に4行が格納されます。PADでは0ベースでリスト化され、最終行が一つ余分な分追加されているため、2行目取得のためには[.length - 2 ]が必要です。.Lenghtプロパティで得られる値と、0ベースのリストにより、ー1ではできない少々ややこしい変数操作が必要になります。

-業務効率化