パソコンにWindowsが登場する以前は、DOS起動が最初に必要になりました。
ディスクオペレーティングシステムですが、画面表示は文字だけで殺風景です。
立ち上がりで日付と時刻の表示に続けて、コマンドプロンプトの”C:¥>”が登場。
ここから、実行させるコマンドを入力して、Lotus1-2-3なんかを動かしました。
もっとも、”Autoexec.bat”の自動実行ファイルにタイプすれば、連続起動です。
プロンプトから入力なんて不要になりましたが、今回の話は、DOSのコマンド。
よく使ったのは、”Dirでしてファイル名やサイズの一覧を出力して参照しました。
ただ、問題なのは、引数で”/P”を忘れると、画面が一時停止しないで流れます。
それで今回取り上げたのは、コマンドの”Tree”なんだけれど、表示が問題だな。
出力した画面が一時停止する引数がなく、走馬灯のように画面が表示し続ける。
ドライブ配下のフォルダー階層と含まれるファイルが一覧できると便利なのに。
つまり、ファイルの詳細ができなかったりしましたが、それも懐かしいお話だ。
NECはHDDがAドライブ |
それで、こういったコマンドが忘れ去られたかというと、どっこいしぶといの。
ウインドウズでも、このコマンド入力のできる”CMD”ウインドウズがあるんだ。
”Dir”も、この”Tree”コマンドも出力はできますが、ツリー表示は走馬灯のまま。
だから、VBAでDOSコマンドを実行して、その結果をワークシートに書き出す。
まあ、こうすればデータが残されて、後から参照したり編集したりもできるな。
なので、そのサンプルコードを書きあげてみましたが、ネットの引用で大改造。
みんなは、引用元が同じと思われるコードを紹介していて、単なる使い回しだ。
コードの内容を理解しているとも思えず、ならばと一つのプロシージャに集約。
というわけで、下記に紹介しておきますので使ってみたい人はご自由にどうぞ。
一方、引用元が同じと思われたコードでは、プロシージャから関数プロシージャを呼出す構造で、しかも調べるフォルダーパスをブーリアン変数で真偽を調べるなど、少し蛇足なのではないかと思ったのでした。
※サンプルコード
Sub DrvFldrTreeShow()
Dim arr As Variant, DosCmnd As String
Dim WSH
Cells.ClearContents
Set WSH = CreateObject("WScript.Shell")
DosCmnd = ""
DosCmnd = DosCmnd & "cmd /c tree "
DosCmnd = DosCmnd & "ここに検索先のパスを入れる"
DosCmnd = DosCmnd & " /f" ’引数、/fは、ファイル名の表示
DosCmnd = DosCmnd & ""
Application.ScreenUpdating = False '実行速度を上げるので画面表示停止
arr = Split(WSH.exec(DosCmnd).stdout.readall, vbCrLf)
Range("A1").Resize(UBound(arr)+1) = WorksheetFunction.Transpose(arr)
Application.ScreenUpdating = True '表示停止を解除して画面表示
End Sub
解説:
’取得情報が長いければ、wExec.stdout.readalldeでフリーズ回避
'ツリー構造を配列(横方向)に格納して、Transposeで縦(行)方向に変換
'Resize(UBound(arr) + 1)分の行範囲にサイズ変更(要素は、”0”ゼロスタートなので、個数的に1を追加)
0 件のコメント:
コメントを投稿