客先に納入したVBのプログラムなのですが、先日「75:パス名が無効です」のエラーが発生しました。
エラーが発生した部分はファイルをオープンし、読み込む処理を行っているところです。
このファイルは他のプログラムからもアクセスすることがあるためオープン時にロックして処理を行っています。
「55:ファイルは既に開かれています」や「70:書き込み出来ません」のエラーが発生することは分かっていたのでエラートラップを仕込んであります。
以下にその処理を抜粋しました。
intFileNo = FreeFile()
Open strFileName For Random Lock Read Write As #intFileNo Len = Len(udtHeader)
…(ここにエラートラップ処理が記述してあります)
Get #intFileNo, 1, udtHeader
close
※strFileNameには読込対象となるファイル名が格納されます。iniファイルから読み込んだ値と固定文字列から生成しているので空白になっていたりすることは考えられません。
※udtHeaderはレコードで読み書きするためのユーザ定義型変数です。
上に記述した他のプログラムも同様の処理でファイルアクセスを行っています。
ファイルオープン前にファイルの有無チェックは行っています。
この中の処理で「パス名が無効です」が発生する要因が分からず困っています。
自分だけではなく他のプログラムもアクセスすることが要因としてあるだろうとは思うのですが、どのような状況になれば発生するかが分かりません。
もし、なにか分かる方がいらっしゃいましたらご教授お願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
「パス名が無効」というキーワードにて
私の記憶が反応し、その材料をもとに考えられるものとして…
・現場では、アクセスするファイルを格納しているディレクトリの
パス中にスペースが入っている。
この場合、推測される動きは
スペースの部分でパス名が区切られてしまうため
Open処理は成功したっぽい動きをしてしまう。
しかしGet処理では目的のファイルは存在していないうえ
アクセスしようとしているパス自体が存在していないために
「パス名が無効です」というエラーになると考えられます。
これ「C:\Documents and Settings\~~」とかに格納していると発生してしまうという
とある分野では盲点をつかれた微妙に有名な現象。
対策はダブルクォーテーションでくくった格好で指定するらしいです。
似たようなものに、単純にパス名が長過ぎというのがあります。
・連続稼動しているため、別の部分の影響が溜まりに溜まって
結果、その部分が被害を受けた。
この場合、乱暴な言い方をするなら
「そのソースが関わっている全てのリストが調査対象」
となってしまいます。
どこかの変数の領域確保の大きさが間違っていたり、
想定以上のデータを処理が発生した影響により
結果、パス名を格納している部分のメモリが破壊された。
VBで発生しうるものかどうか判りませんが
しうるかどうか判らないからこそ
稼働環境を考えると可能性が高いともいえます。
客先で確認可能でしたら、Open 前後、Get 前後に MsgBox でもで
パス名を表示させてみてもよいでしょう。
件数や時間など、なんらかの特定のタイミングで発生しているなら
どこかでファイルを開きっ放され過ぎ~~の結果、オープンできなかった。
(つまり #inrFileNo が不定となった。)
けれどエラートラップに捕まってオープンできたフリになった。
なのに Get しようとしたので悲鳴をあげた。
どちらにしても、質問文にある数行のステップでも
稼働時間、データ件数、空き容量などの複数の要素が想定されます。
さて、エラーを引き起こしている正体は
どのような証拠隠滅をしているのでしょう。
あっ、「一つのディレクトリに作成可能なファイル数の上限を超えた」
というのを忘れていました。
以上、ソフト障害プロファイリング遅報でした。
この回答への補足
回答ありがとうございます。
Openするファイルのパスにスペースは入っていませんし、文字数も30字程度なので問題ありません。
既に存在しているファイルに対して処理を行っているので、作成可能ファイル数の上限は大丈夫です。
連続稼働していて、他のプログラムからも同じファイルをアクセスしているためにメモリを破壊してしまうような可能性があるのでしょうか?
何日かはメンテナンスで停止することもありますが、3年間ほど稼働し続けている状態で今までに一回も発生しておらず、発生直前の1秒前にも同じ処理を行っていますが、まったく問題ありませんでした。
メモリが破壊されてしまう可能性を検証することを考えてみます。
No.3
- 回答日時:
エラーが発生したときにstrFileNameの値は意図したファイルが入っているんですよね?
1つ1つ間違いないのか潰していくしかないですね。
間違いないと思ってたらウッカリってよくあるし。
>「55:ファイルは既に開かれています」や「70:書き込み出来ません」のエラーが発生することは分かっていたのでエラートラップを仕込んであります。
最悪↑の処理にエラー発生時の処理も入れるしかないのかな。
この回答への補足
Open処理の前にファイルの存在チェックを行っていますし、もしファイルが存在しなくても新規に作成するのでstrFileNameに意図したファイル名が入っていなくてもエラーは発生しません。
今回の質問は上記のソースコードで「パス名が無効です」のエラーが発生する要因を教えて頂きたいのです。
エラートラップで回避するようには既になっているので、なぜこのエラーが発生してしまったかを突き止めたいのです。
No.2
- 回答日時:
他のプログラムってのの挙動を調べる必要はないでしょうか?
たとえば他のプログラムで該当ファイルを削除したりとか移動しているとか。
あとはstrFileNameってのがグローバル宣言されていてどっかのプログラムから値を書き換えられているとか・・・
この回答への補足
回答ありがとうございます。
他のプログラムの動作はこのプログラムと同じ記述でファイル内容を読み込むだけです。ファイルを削除したり、移動したりはしていません。
strFileNameはプロシージャ内で宣言されており、プログラム内の他の部分で書き換えられることはありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Excel(エクセル) Excelを開くとエラーが出る 2 2022/10/03 16:13
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Windows 10 Windows Updateが動作しません 7 2022/08/12 16:26
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
このQ&Aを見た人はこんなQ&Aも見ています
-
好きなおでんの具材ドラフト会議しましょう
肌寒くなってきて、温かい食べ物がおいしい季節になってきましたね。 みなさんはおでんの具材でひとつ選ぶなら何にしますか? 1番好きなおでんの具材を教えてください。
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。 「そうなんだね」と「確かに披露する場所ないね」で評価します。
-
とっておきの手土産を教えて
お呼ばれの時や、ちょっとした頂き物のお礼にと何かと必要なのに 自分のセレクトだとついマンネリ化してしまう手土産。 ¥5,000以内で手土産を用意するとしたらあなたは何を用意しますか??
-
いけず言葉しりとり
はんなりと心にダメージを与える「いけず言葉」でしりとりをしましょう。 「あ」あら〜しゃれた服着てはりますな 遠くからでもわかりましたわ
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
ExcelでVBAを使用した際に、『パス名が無効です』とエラーになります。
Excel(エクセル)
-
MkDir パス名が無効です
Visual Basic(VBA)
-
マクロを実行するとパス名が無効です
その他(Microsoft Office)
-
-
4
VB実行時エラー75:「パス名が無効です」について
Visual Basic(VBA)
-
5
Excel2019 ワークシートのコピーVBA パス名が無効
Visual Basic(VBA)
-
6
FileCopy時のエラー
Visual Basic(VBA)
-
7
昨日まで動いていたエクセルのマクロが急に動かなくなりました
Excel(エクセル)
-
8
モーダルフォームとモードレスフォーム
Visual Basic(VBA)
-
9
RmDirでフォルダが削除できない vba
PowerPoint(パワーポイント)
-
10
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
11
frxファイルの役目
Visual Basic(VBA)
-
12
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
13
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
14
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
15
On ErrorでエラーNoが0
Visual Basic(VBA)
-
16
コモンダイアログでフォルダを固定したい
Visual Basic(VBA)
-
17
動的配列が存在(要素が有る)か否かを判定できますか?
Visual Basic(VBA)
-
18
VB6でユーザー定義型がNothingかどうか調べるには?
Visual Basic(VBA)
-
19
VB6.0 パスが見つかりません
Visual Basic(VBA)
-
20
ACCESSで開いているユーザーの特定方法
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルマクロでエラーの原因...
-
access テキストボックスの値取得
-
FTPの送信結果を検知したい
-
Returnに対するGoSubがありません
-
VBから参照できないCのDLLを使...
-
「パス名が無効です」の発生原因
-
batファイルでレジストリキーの...
-
VBでファイルが開かれているか...
-
PowerShellを使って関連付けら...
-
アクセスのクエリでコンパイル...
-
EXCELのVBAでWORDが開いてある...
-
VB6 Dir関数で52エラー発生
-
ワークブックに名前をつけて保...
-
マウントしたファイルサーバー...
-
「複数の選択範囲に対して実行...
-
ファイルクローズ(fclose)でエ...
-
他のmdbファイルのform,macro,r...
-
FORTRANの実行エラーについて
-
fgets関数のEOFの扱い方について
-
ASP.NET 2.0にてアプリが動作し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「パス名が無効です」の発生原因
-
access テキストボックスの値取得
-
Returnに対するGoSubがありません
-
VBから参照できないCのDLLを使...
-
gccを行ってもexeファイルが生...
-
batファイルでレジストリキーの...
-
NAS上のファイルの使用中が解除...
-
PowerShellを使って関連付けら...
-
FTPの送信結果を検知したい
-
エクセルマクロでエラーの原因...
-
「複数の選択範囲に対して実行...
-
VBでファイルが開かれているか...
-
アクセスのクエリでコンパイル...
-
fgets関数のEOFの扱い方について
-
Vba ファイル書き込み時に書き...
-
VB6 Dir関数で52エラー発生
-
VBA ExecuteExcel4Macro 型が一...
-
【COBOL】read文でエラー
-
EXCELのVBAでWORDが開いてある...
-
Access2013にてドラッグ&ドロ...
おすすめ情報