アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。
現在 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

A 回答 (2件)

Unicode文字列での長さではなく MBCS(マルチバイト)の長さでの制限のようです



Debug.Print LenB(StrConv( TargetFile, vbFromUnicode) )
これが 当方のWinXPSP3 + Excel2003 ですと 260以上ですと
Error53 ファイルが見つかりません
が発生しました

ちなみに
C:\Program files\新しいフォルダ\ ... 新しいフォルダ\ABCDEFGH\boot.ini
で "新しいフォルダ\" が15個です

この回答への補足

redfox63様 ご回答ありがとうございます。

LenB(StrConv( TargetFile, vbFromUnicode) )で確認したところ、ずばりでした…。
設計自体の見直しを図ってみますorz

ありがとうございました。

補足日時:2009/02/19 10:00
    • good
    • 0

変数TargetFileの内容が255文字を超えていませんか?

この回答への補足

redfox63様
回答ありがとうございます。

なるほど、見落としておりました…。
255越えるとエラーが発生するんですね…。
その可能性もありえます。

掲載時に記載ミスしてしまいましたが、
TargetFileには、
TargetFile = WBK & "\..\..\..\..\..\data\sample\" & A(1) & "\" & A(2) & "\" & A(3) & "\" & A(4) & "\" & A(4) & ".txt"
が格納されるようになっております。

A(1)~A(4)の配列には、一つそれぞれ全角12文字を上限とし、文字が入ります。
例)サービス紹介

これを回避するには、階層を浅くする他ないのでしょうか…。

補足日時:2009/02/18 21:33
    • good
    • 0
この回答へのお礼

Len(str)でカウントしてみたのですが、
配列内の1つあたりの値を12文字の上限に設定して再度試してみたのですが、195文字となり、255文字以下でもエラーが発生してしまいます・・・。

お礼日時:2009/02/18 22:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!