実行時エラー"5"(プロシージャーの呼び出し、または引数が不正)とは?

Question 53.5 Previous Next
遠山さん作のマクロで、ファイルの管理表を VBA で作成しました。 最近はじめたばかりなので、どこが悪いのか理解できないで困っています。
詳細は こちら 500連発第2弾マクロ番号340 には、指定されたフォルダーを検索して、指定された拡張子を持つファイル名の一覧表を作成する機能があります。その一覧表には、拡張子が大文字・小文字で、ありのまま表示されます。

私は、その一覧表を利用してファイルをオープンするマクロを作成しているのですが、拡張子が小文字でないと開かない場合があるため、このHPのFAQ「
ファイル名を取得後に拡張子と分離する方法は?」を参考にして、拡張子を小文字に変換するマクロを作成しました。

サンプルをそのまま用いて拡張子をファイル単位で変更したところ、ルンルン気分で変更出来ました。 ここで欲が出て、一覧表の拡張子をすべて小文字に変更するため、Do While ... Loop とか Do Untill ...
ファイル名一覧表シート Loop 構文のマクロを作成しました。
Sub ファイル名一覧表の拡張子を小文字に置き換える()
    Dim 収得ファイル名 As String
    Dim ピリオド位置 As Integer
    Dim 変更ファイル名 As String
    Dim 拡張子名 As String
    Dim 変更拡張子名 As String
    Dim i As Integer

    i = 1
    収得ファイル名 = Cells(1, 1)
    Do Until 収得ファイル名 = ""
        収得ファイル名 = Cells(i, 1)
        ピリオド位置 = InStr(1, 収得ファイル名, ".", vbTextCompare)
        変更ファイル名 = Left(収得ファイル名, ピリオド位置 - 1)
        拡張子名 = Mid(収得ファイル名, ピリオド位置 + 1)
        Cells(i, 2) = 変更ファイル名
        Cells(i, 3) = 拡張子名
        変更拡張子名 = LCase(拡張子名)
        Cells(i, 3) = 変更拡張子名
        Cells(i, 4) = Cells(i, 2) & "." & Cells(i, 3)
        i = i + 1
    Loop
End Sub
しかしながら、上記マクロを実行するとエラー表示が出てしまいました。 私は、サンプルをそのまま使っていると思うのですが(私が利用しやすいよう に名前等は変更しています)。現在の私の能力ではこのエラーを処理できません。

エラー ”実行時エラー5”  プロシージャーの呼出、または引数が不正です。

マクロをくっつけてファイルを操作するくらいの私ですから、”マクロ集”は大変貴重な出版物です。その中でも、340 は大変重要なマクロです。何か方法が有ればと思いメールしました。 私のような質問がいろいろと有ると思います。まったくのシロウトが、マクロ集に たよって自分なりに迷路(プログラマーの方から見れば、ばからしいと思いますが)に入り込んだ時の救いとして、第3弾が出版されることを期待します。
Answer   Copyright (C) 2002.5.31 永井善王
いろいろ参考にしていただいて、ありがとうございます。第3弾が出版されるようになりましたら、よろしくお願いします。
エラーダイアログ
ご質問内容がしっかりとしていますので、さっそく、動作確認テストをしてみましたところ、ご指摘どおり右図のエラーメッセージが表示されました。

こういう場合には[デバッグ]ボタンをクリックすると、エラーを起こしているマクロコードが表示されますから、そこから原因究明を始めるとよいかと思います。

あなたのマクロの場合は、下図のように表示されました。
デバッグウィンドウ
黄色く表示されている行が、エラーを起こしているマクロコードです。
Excel2000を使ってみえるということなので、怪しいと思われる変数にマウスポインタを重ねると、その内容が表示されるはずです。
そうすると、収得ファイル名="" と表示され、その変数に値が入っていないことがわかります。 何故そうなってしまうのかを知りたいので、そこから2行上の i にマウスポインタを重ねてみると図のように i=10 と表示されて 変数 i が10行目を指していることがわかります。10行目にはデータが入っていませんね。

なぜいけないのか、理由はお分かりかと思います。そうです、あなかの Do Untill ... Loop文は変数「収得ファイル名」に何も入っていない状態(正確には長さゼロの文字列)でない場合にループを続けます。だったら、黄色く表示されている行は、もう実行されるはずはありません。
よって、解決方法としては、Do Untill ... Loop文の次にある
収得ファイル名 = Cells(i, 1) のコードを Loop 文の直前へ移せばよろしいかと考えます。

Excel VBA Macro