[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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
変更後のファイルが無いことを確認していましたとか。 (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
ターゲットのディレクトリー内に
ファイル名が長い(162文字)ファイルが存在します。
(Len関数でチェックした文字数なので漢字が含んでいるので256バイトを超えていると思われます)
256バイト問題が発生した時の回避方法としては、
ファイルシステムオブジェクト(FileSystemObject)を利用するように記載されていますので
出来るかどうかは判りませんが勉強してみます。
(マツモト) 2023/08/03(木) 14:38:48
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.