和風スパゲティのレシピ

日本語でコーディングするExcelVBA

RmDirとFSO.DeleteFolderの違い

フォルダを削除する際に使用する、
RmDirステートメントと、FileSystemObject.DeleteFolderメソッドの違いを解説します。

※ FileSystemObjectは以下FSOと略記します。

同じところ

実はこの2つはほとんど違うものです。

違うところ

RmDirステートメントは正確には「空のフォルダを削除する」ステートメントです。

フォルダの中にファイルやサブフォルダが1つでもあると、
RmDirステートメントはエラーになります。


対してFSO.DeleteFolderメソッドは、
「中身のファイル/サブフォルダごとフォルダを削除する」メソッド
です。

多くの人がイメージする「フォルダを削除する」は、
こちらなのではないかと思います。


また「ワイルドカード*」を使って複数のフォルダを削除するのも、
DeleteFolderは出来ますがRmDirにはできません。


ということで、まったく違うものと言っていいくらいですね。



Dir系列とFSOは対応している機能が多く、例えば

  • フォルダを作成する「MkDirとFSO.CreateFolder」
  • ファイルを削除する「KillとFSO.DeleteFile」

などは、処理内容はもちろんのこと、エラー発生条件までもが一致していて、
ほとんど同じものと言ってもいいくらいです。


このようにそれぞれペアが組める両チームの類似メソッド同士で、
ここまで違う動きになるペアはRmDirとDeleteFolderだけだと思います。

使い分け

「中身のファイル/サブフォルダごとフォルダを削除」したい場合は、
FSO.DeleteFolderメソッドを使用してください。


あまりなさそうですが、「フォルダが空の時だけ削除」したい場合は、
RmDirステートメントを使用してください。


それぞれの実際のソースコードは以下の記事をご覧ください。


www.limecode.jp
www.limecode.jp