- 締切済み
テキストファイル操作 実行時エラー '52'
お世話になります。 現在 Excel2003の環境でVBAを使いファイル生成プログラムを書いています。生成されるファイルは、フォルダの中へ階層構造上に生成されていき、第5階層まで生成できます。 下記モジュールは、第4階層目のファイルを生成するモジュールとなっており、第1~3のモジュールと、パスの指定以外違いが無いのですが、 上手く生成できるときと、「実行時エラー '52'」が表示されるときがあり、まったく原因がつかめません。 第1~3のモジュールは何の問題も無く動作します。 エラーが出るのは、下記の 「 Open TargetFile For Output As fno」の部分です。 実行時エラー '52'になりうる原因も調べてみましたが、どれも該当しません。 1.操作しようとしたファイルが存在しなかった。 2.操作しようとしたファイルに対するアクセス権がなかった。 3.操作しようとしたファイルを Open 文で開いていない、または不正なファイルユニット番号を使っている。 4.ネットワーク上のファイル(例. \\Server\Share\hoge.txt)を操作しようとした。 どなたかお知恵をお貸し下さいorz '<サンプルモジュール> WBK = ThisWorkbook.Path 'フォルダパスを分割 buf = SH1.OLEObjects("test1").Object.Value A = Split(buf, " > ") 'ターゲットファイル Target = WBK & "\..\..\..\..\..\data\sample\" & A(1) & "\" & A(2) & "\" & A(3) & "\" & A(4) & "\" & A(4) & ".txt" 'ファイル生成及び書き込み fno = FreeFile Open TargetFile For Output As fno For i = 0 To 19 If SHDB.Range("O" & i + 3) <> "" Then Print #fno, SHDB.Range("O" & i + 3); ","; End If Next i Close fno
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
Unicode文字列での長さではなく MBCS(マルチバイト)の長さでの制限のようです Debug.Print LenB(StrConv( TargetFile, vbFromUnicode) ) これが 当方のWinXPSP3 + Excel2003 ですと 260以上ですと Error53 ファイルが見つかりません が発生しました ちなみに C:\Program files\新しいフォルダ\ ... 新しいフォルダ\ABCDEFGH\boot.ini で "新しいフォルダ\" が15個です
- redfox63
- ベストアンサー率71% (1325/1856)
変数TargetFileの内容が255文字を超えていませんか?
お礼
Len(str)でカウントしてみたのですが、 配列内の1つあたりの値を12文字の上限に設定して再度試してみたのですが、195文字となり、255文字以下でもエラーが発生してしまいます・・・。
補足
redfox63様 回答ありがとうございます。 なるほど、見落としておりました…。 255越えるとエラーが発生するんですね…。 その可能性もありえます。 掲載時に記載ミスしてしまいましたが、 TargetFileには、 TargetFile = WBK & "\..\..\..\..\..\data\sample\" & A(1) & "\" & A(2) & "\" & A(3) & "\" & A(4) & "\" & A(4) & ".txt" が格納されるようになっております。 A(1)~A(4)の配列には、一つそれぞれ全角12文字を上限とし、文字が入ります。 例)サービス紹介 これを回避するには、階層を浅くする他ないのでしょうか…。
補足
redfox63様 ご回答ありがとうございます。 LenB(StrConv( TargetFile, vbFromUnicode) )で確認したところ、ずばりでした…。 設計自体の見直しを図ってみますorz ありがとうございました。