リストHOME  リストOpen Source

DOSコマンド

概要

 Windowsが主流になる前のOSに、DOS(ドス)と言われるものがありました。DOSは、現在のようにGUIベースのOSではなく、コマンドラインの入力で操作するOSでした。Windowsになった今でも、このDOSは利用することが可能で、知っていると非常に便利なコマンドもあります。このDOSコマンドを、VBAから実行できるようにしたフロントエンドとなる関数群を実装したソースコードを、今回は紹介したいと思います。
 場合によっては、DOSコマンドを利用することで、コーディング量を減らすことも、出来ますし、既に実績のあるコマンドですので、不具合を発生させず動作の安定につなげることが出来ると思います。

※フロントエンドとは、ある機能を果たす装置・機械(ブラックボックス)などの手前(フロント)に、操作の為に備え付けられたタッチパネルなどの端末(エンド)というところが語源と思われます。今回は、ある結果をもたらすDOSコマンドを、操作するための関数IF群という意味合いで、フロントエンドと名づけています。


 ソースコードが以下からダウンロード出来ますので、参考にしてみてください。ソースコードは、Microsoft社の製品 エクセル向けに書いたものなので、利用するには、ご使用のコンピュータに、エクセルがインストールされていることが、必須条件です。


 以下がエクセルで動作しているサンプル画像です。

DOSコマンド実行のサンプル



技術ポイント



バッチ処理について

 バッチ処理は、DOSのコマンドを記述したバッチファイルに従い、OSのシェル機能を利用してコマンドを実行していく処理のことです。以下のようなコマンドラインにより、バッチファイルを実行することが出来ます。今回は、実行結果を標準のコンソール出力ではなく、リダイレクトによりファイル出力しています。

バッチ処理のコマンドライン

 %1の箇所は、バッチファイルに直接 c:\test と記述してもOKですが、この値が動的に変わるような場合は、上記のような使い方が便利です。

※ファイル・エクスプローラで、ファイルをダブルクリックすると関連付けられたアプリケーションがオープンすると思いますが、これが、OSのシェル機能の一つです。



排他制御、同期処理ついて

 ネットワーク上の共有フォルダに、エクセルファイルが存在する時に、複数のユーザが一緒に利用する場合で、既に編集しているユーザがいる場合、それ以降に、他のユーザが編集しようとすると、『読み取り専用で、開きますか?』と訊かれる場合が、ありますが、このことを、排他制御(処理)といいます。同時に、複数のユーザが編集して、上書き保存すると、エクセルファイルの変更に矛盾が生じてしまいますので、編集が出来るユーザを一人に制御して、他のユーザは、編集中のユーザの作業が、終了するまでまたなければなりません。


 今回のサンプルでは、バッチ処理のプログラムが出力しているリダイレクトファイル(結果ファイル)に対して、VBAのプログラムが、その結果を閲覧しようとしています。従って、VBA側のプログラムは、バッチ処理が終了して結果ファイルが、きちんと出来上がるまで、待たなければなりません。WinAPIを使って、このことを実装していますが、この待つ動作のことを、『バッチ処理と同期をとり排他制御している』といいます。



改善案

 DOSコマンドの応用例として、ブックオープン時に、ipconfigコマンドを実行し、MACアドレスをチェックすることで、そのPCでしか動作しないようにチェックします。該当PC以外では、オープン時に、強制クローズしてしまえば、VBAのソースコードの持ち出しや、盗難を防ぐことができ、社内の情報漏えいを未然に防ぐことができます。
 このように、既にDOSコマンドで出来ることを利用すれば、非常に開発効率が上がりますし、VBAとWinAPIだけ利用する場合に比べて、開発の幅がグッと広がります。

 ※エクセル起動時のプログラムを記述する場合は、無限ループなどのコーディングミスをすると、二度とコーディング編集ができなくなってしまうので、注意が必要です。無条件にクローズするように実装してしまったり、無限ループを実装してしまうと、本当に、編集作業が出来なくなってしまいますので、動作が安定するまでは、何か対策(バックアップ etc.)をとっておいたほうが良いでしょう。



Errオブジェクト

 今回のサンプルでは、ファイルのI/Oの箇所に例外をトラップするように実装していますが、例外が発生した時には、Errオブジェクトを利用するとエラーの内容が、取得できるようです。以下が、MSDNのサイトですが、エラー値の一覧がありますので、そちらを参考にしてみてください。

MSDN:
Errオブジェクト

免責事項

 作者は、本ソフトウェアの使用または使用不能から生じるコンピュータの故障、情報の消失、その他あらゆる直接的及び間接的被害に関して一切の責任を負いません。

ダウンロード

不具合の報告

 ご使用にあたり、改善の要望、不具合の発生等ありましたら、画面下のアドレスまで、ご連絡頂きますよう、宜しくお願いいたします。ご面倒、ご不便をお掛けしますが、宜しくお願いいたします。


休日判定・ページのフッター
管理者のメールアドレス