本日お仕事で作成しているマクロの中で気付いたこと。VBAでエクスプローラ上のファイルをコピーしようとする場合、
選択肢としてはFileCopyステートメントを使うか、ファイルシステムオブジェクトのCopyFileメソッドのどちらかになると思うのですが、
FileCopyステートメントでファイルをコピーしようとすると、たまに【ファイルが存在しません】とかいうエラーが出てコピーに失敗することがあるんですよねorz。
で、その原因を調べていくと、恐らくコピーする対象のファイルパス、もしくはコピー先に指定しているファイルパスが一定以上の文字数を超えていると
どうやらFileCopyステートメントは失敗してしまう模様……っていうかちょっと酷いなこれ(苦笑)。というわけでちょこっとだけ面倒ではあるのですが、
エクスプローラ上のファイルのコピーについては、ファイルシステムオブジェクトでやった方が圧倒的に動作が安定することが分かったので、
エクスプローラ上のファイルをコピーしようとする時は、これからはこちらを使っていこうと思います。
…というかきちんと確認はしていないけど、恐らくファイルの削除もファイルの移動(実質はリネーム)も同じだと思うので、これからはもっと積極的に使っていこうと思います、ファイルシステムオブジェクト。CreateObjectや参照設定をめんどくさがらずに(-_-;。
選択肢としてはFileCopyステートメントを使うか、ファイルシステムオブジェクトのCopyFileメソッドのどちらかになると思うのですが、
FileCopyステートメントでファイルをコピーしようとすると、たまに【ファイルが存在しません】とかいうエラーが出てコピーに失敗することがあるんですよねorz。
で、その原因を調べていくと、恐らくコピーする対象のファイルパス、もしくはコピー先に指定しているファイルパスが一定以上の文字数を超えていると
どうやらFileCopyステートメントは失敗してしまう模様……っていうかちょっと酷いなこれ(苦笑)。というわけでちょこっとだけ面倒ではあるのですが、
エクスプローラ上のファイルのコピーについては、ファイルシステムオブジェクトでやった方が圧倒的に動作が安定することが分かったので、
エクスプローラ上のファイルをコピーしようとする時は、これからはこちらを使っていこうと思います。
…というかきちんと確認はしていないけど、恐らくファイルの削除もファイルの移動(実質はリネーム)も同じだと思うので、これからはもっと積極的に使っていこうと思います、ファイルシステムオブジェクト。CreateObjectや参照設定をめんどくさがらずに(-_-;。