2013年10月19日土曜日

移動の実装 MoveFile

 ファイルの移動も簡単です。コピーの場合と同じように、FileSystemObjectのメンバー関数であるMoveFile関数を使います。
 MoveFileは、名前の変更と移動の二つの機能がいっしょになった関数です。
下の例では、同じフォルダに元のファイルと違う名前を指定しているので、ファイル名の変更をしたことになります。
 移動する場合は、2番目の引数を元のファイルと違う場所にすればよいだけです。

=====================================================
Sub testForMove()

    Dim fso As New FileSystemObject
    
    On Error GoTo Err_testForMove
    
    fso.MoveFile "c:\test.xlsx", "c:\hogehoge.xlsx"
    
    Exit Sub
    
Err_testForMove:

    MsgBox "ファイルの移動中にエラーが発生しました。" & _
     vbCr & "エラー詳細:" & Err.Description

End Sub
=====================================================

MoveFile関数も、戻り値がありません。しかし、移動先のファイルが既に存在する場合などはエラーが発生します。
  エラー原因を調べるために、3行目の"On Error ・・・"を宣言しています。
  エラー処理では、メッセージボックスでエラーの発生した原因を調べるために便利な、Err.Descriptionを表示させています。

  前回と今回で、ファイルのコピーと移動の基礎知識を紹介しました。次回以降、この基礎知識をもとに、大量のファイルを分別するコピー(移動)する方法を紹介いたします。



*********  コラム Option Explicitの意義 ******************

 C,C++,C#など、私のこれまで使用してきた言語は、変数をあらかじめ宣言しないとコンパイルエラーになります。しかし、VBAでは、この宣言をしない限りコンパイルエラーになりません。
 VBAで、変数を宣言しないで使用することのメリット、デメリットを考えてみました。

【メリット】
  なによりも、変数宣言のキータイプをしなくてもよいのでらくちんです。また自由に変数を作って代入ができるので、精神的な解放感もあります。

【デメリット】
  タイプミスがVBAを実行したときに判明します。このデバッグがけっこうやっかいで、なかなか見つけることができません。


 一般的に、ソフトウェア開発はより上流工程で不具合を発見し修正したほうが制作コストが安くなると言われています。
 Option Explicitは、実行する前にタイプミスを見つけることができるので、その理屈に合っています。
 ただし、関数の引数のタイプ途中に別の行へ移ろうとすると、エラーのメッセージボックスがでるのが非常に面倒です。これだけは、なんとかなりませんかね。(C#などは、その行に波線が入るだけで、スマートです)

VBAのコンパイル操作
<script data-ad-client="ca-pub-1118677719612861" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

0 件のコメント:

コメントを投稿