
お世話になります。
現在 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件)
- 最新から表示
- 回答順に表示
No.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
ありがとうございました。
No.1
- 回答日時:
変数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文字を上限とし、文字が入ります。
例)サービス紹介
これを回避するには、階層を浅くする他ないのでしょうか…。
Len(str)でカウントしてみたのですが、
配列内の1つあたりの値を12文字の上限に設定して再度試してみたのですが、195文字となり、255文字以下でもエラーが発生してしまいます・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel: ファイル名になぜ、[...
-
エクセルのファイル:「自分」が...
-
CSVファイルの特定行の削除
-
フォルダ内の複数のファイルの...
-
VBA ファイル一覧を取得して全...
-
彼女の過去の恋愛に嫉妬してし...
-
ファイルが移動してもリンクの...
-
iCloud for Windowsをアンイン...
-
ネットワークオーディオ使用時...
-
Dドライブフォルダ内のエクセル...
-
xlsファイルが開かない。
-
VB6.0のログファイル
-
OneDrive必要なものでしょうか
-
【Excel VBA】ファイルにヘッダ...
-
docxをmht形式で保存したファイ...
-
エクセル保存終了で一時ファイ...
-
batファイルで親フォルダのコピー
-
VBScriptでExcelファイルをDLす...
-
Wordについて質問です。 Wordの...
-
VBSでフォルダ内の最新のファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel: ファイル名になぜ、[...
-
エクセルのファイル:「自分」が...
-
彼女の過去の恋愛に嫉妬してし...
-
CSVファイルの特定行の削除
-
ファイルが移動してもリンクの...
-
複数のExcelファイルにある同名...
-
EXCELVBAにて文字列にして「01...
-
xlsファイルが開かない。
-
vbsからのExcelマクロ呼び出し...
-
FTPのgetとputの使いわけ。
-
CSVファイルの暗号化
-
docxをmht形式で保存したファイ...
-
iCloud for Windowsをアンイン...
-
VBA ファイル一覧を取得して全...
-
[Unity]シーンファイルの中が消...
-
VBSでフォルダ内の最新のファイ...
-
VBAにおいて、ファイルの移...
-
このファイルは外部のエディタ...
-
batでファイル名を変更したい(...
-
フォルダ内の複数のファイルの...
おすすめ情報