[[20230803123938]] 『fileName = Dir でエラーが出る原因が分からない』(マツモト) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『fileName = Dir でエラーが出る原因が分からない』(マツモト)

ファイル名を変更するのにコード作成しましたが

 fileName = Dir で「プロシージャの呼び出し、または引数が不正です。」とエラーがでます。

F8でトレースすると最初のIF分で該当せずにすぐにエラーの出るコードに処理が進行すると
エラーが出ました。

どうすればエラー無く処理できますか。

必要と思われる所だけコードを書き出しました。
見てどこを修正すべきかをアドバイスお願いします。

      ' ターゲットディレクトリーの指定
      folderPath = "C:\Users\Uesr\Terget\"

      ' ターゲットファイル名
      fileName = Dir(folderPath & "*.txt")

      Dim suffix As String
      suffix = " - SupNum.vvs - 優先箱番号処理系列 "

      Do While fileName <> ""
            If Left(fileName, 8) = "[個人特定番号]" Then
                  ' ファイル名から先頭の8文字を削除したファイル名
                  newFileNameA = Mid(fileName, 9)

                  If Right(fileName, Len(suffix)) = suffix Then
                        ' ファイル名から更に後ろ側の24文字を削除したファイル名
                        newFileNameB = Left(newFileNameA, Len(newFileNameA) - 28)

                        ' 新しいファイル名で変名
                          'Debug.Print newFileNameB
                        Name folderPath & fileName As folderPath & newFileNameB & ".ts"
                  End If
            End If

            ' 次のファイル名を読み込む
            fileName = Dir
      Loop

< 使用 Excel:Excel2021、使用 OS:Windows11 >


↓のようにしたらどうなりますか?
 ' 次のファイル名を読み込む
 fileName = Dir
     ↓
 ' 次のファイル名を読み込む
 fileName = Dir()
               ~~

とりあえず確認だけ。

(もこな2 ) 2023/08/03(木) 12:51:04


 サンプルデータ作るのが面倒でしたが、普通に実行できました。
 >必要と思われる所だけコードを書き出しました
 省略されたところに原因があるかもしれません
(´・ω・`) 2023/08/03(木) 12:54:42

 省略したところでDirを使っていたりしませんか? 割とよくあるケースです。
  変更後のファイルが無いことを確認していましたとか。
(xyz) 2023/08/03(木) 13:01:17

お世話になります。

アドバイスに感謝。

>>fileName = Dir()

こちらに変更しても同じエラーがでます。

>>省略されたところに原因があるかもしれません
>>省略したところでDirを使っていたりしませんか? 割とよくあるケースです。

エラー無く処理されたのとの事で書き出したコードには問題がないのですね。

省略されたコードに問題があるようには思えないのですが ?
又、省略したところでDirは利用していません。

sub ReNameFile()

      Dim folderPath As String
      Dim fileName As String
      Dim newFileNameA As String
      Dim newFileNameB As String

(書き出したコード)

     MsgBox "変名完了 !!"
End Sub

(マツモト) 2023/08/03(木) 13:08:00


 これで全体だということなら、

 fileName は、拡張子が .txt になっているので、
 suffix = " - SupNum.vvs - 優先箱番号処理系列 " の場合、
 Right(fileName, Len(suffix)) = suffix がTrue になることはありません。

 suffix = " - SupNum.vvs - 優先箱番号処理系列 .txt" とかじゃないといけないはず。

 今のコードは、Nameステートメントが実行されることはないので、
 Dir()関数を繰り返しているだけですから、エラーにならないはずです。

 ホントにこれが全体ならですけど
(´・ω・`) 2023/08/03(木) 13:20:21

 多分、ファイル名にShift_JISで扱えない文字が含まれているんじゃないかな?
 Dir関数は扱えない文字が含まれている場合、代替文字「?」U+003Fを返す仕様です。
 その他の制限もあるので、以下に該当しないか、確認してみては...
https://excel-ubara.com/excelvba4/EXCEL262.html

(まる2021) 2023/08/03(木) 13:41:40


まる2021さんから教えてもらったURLを参考にチェックして
問題の箇所でエラーが出る原因が判明しました。

ターゲットのディレクトリー内に
 ファイル名が長い(162文字)ファイルが存在します。
(Len関数でチェックした文字数なので漢字が含んでいるので256バイトを超えていると思われます)

256バイト問題が発生した時の回避方法としては、
ファイルシステムオブジェクト(FileSystemObject)を利用するように記載されていますので
出来るかどうかは判りませんが勉強してみます。

(マツモト) 2023/08/03(木) 14:38:48


# 大分出遅れました。
なるほど。
FSOで統一するんですかね。
ワイルドカードは使えないので取り込んでから拡張子で判断。
名前変更はfilemoveで。
(xyz) 2023/08/03(木) 14:50:39

一応、作成できましたがこんな感じでどうですか !!

 Sub Supjav_RenameFiles2()
    Dim folderPath As String
    Dim fileName As String, filename1 As String
    Dim newFileNameA As String
    Dim newFileNameB As String

    Dim R As VbMsgBoxResult

    ' ターゲットディレクトリーの指定
    folderPath = "C:\Users\Uesr\Terget\"

    ' FileSystemObjectの作成
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")

    ' フォルダ内のファイルを取得
    Dim folder As Object
    Set folder = fso.GetFolder(folderPath)

      Dim suffix As String
      suffix = " - SupNum.vvs - 優先箱番号処理系列 .txt"

    Dim file As Object
    For Each file In folder.Files
        fileName = file.Name

        If Left(fileName, 8) = "[個人特定番号]" Then
            ' ファイル名から先頭の8文字を削除したファイル名
            newFileNameA = Mid(fileName, 9)

            If Right(fileName, Len(suffix)) = suffix Then
                ' ファイル名から更に後ろ側の24文字を削除したファイル名
                newFileNameB = Left(newFileNameA, Len(newFileNameA) - 28)

                ' 新しいファイル名で変名
                'Debug.Print newFileNameB
                fso.MoveFile folderPath & fileName, folderPath & newFileNameB & ".ts"
            End If
        End If

        filename1 = fileName
    Next file

    MsgBox "変名完了 !!"
 End Sub

(マツモト) 2023/08/03(木) 17:29:36


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.