• 締切済み

ドライブにディスクがありません。ディスクをドライブ A: に挿入してください。

VB6.0でフロッピーディスクにファイルを保存するプログラムを作りました。 フロッピーディスクを挿入したままプログラムを終わらせた場合は いいのですが、抜いてから終了させると、上記のようなメッセージが 表示されてしまいます。 デバッグモードで処理をブレイクするとプログラムが終了してしまうので、 いったい何処で処理が止まっているのかも分かりません。 フロッピーディスクへのアクセスは、 CommonDialogの .showsave メソッドを使用しています。 どのタイミングで上記メッセージが出ているのか、 出さないようにするのはどうしたらいいのか、 ご教授お願い申し上げます。

みんなの回答

  • mach999
  • ベストアンサー率75% (36/48)
回答No.3

WSHがインストールされていないと使えないけど、 Set fs = CreateObject("Scripting.FileSystemObject") Set d = fs.GetDrive(fs.GetDriveName("A:")) として、d.IsReadyがTrueかFalseかで判断するとか(フロッピーが入ってないとFalseになる)。

  • VT250F
  • ベストアンサー率30% (26/84)
回答No.2

.showsave メソッドが2回走ってますね。 画面をアンロードしたつもりでも、アンロードした画面の様子を参照すると、再び画面が見えないまま開きます。 ロードイベントが走るってことですね。 その時に、一度覚えたAドライブを見てるっぽいです。 フロッピーに入れる処理が終わったあとは、 コモンコントロールの記憶がCドライブになるように 変更してやるとよいかもしれません。 デバッグですが、ステップ実行に頼りすぎるとこのような 実行時にイベントの二重起動(イベントがイベントを呼んでしまう)に悩まされます。 debug.print メソッドを使ってイミディエイト画面に出したり、msgbox をコーディングして途中の結果をポップアップしつつ、ステップをおっかけることを進めます。 デバッグは試行錯誤なので、あきらめず(時にはあきらめて)がんばってみて下さい。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 >デバッグモードで処理をブレイクするとプログラムが終了してしまうので、 >いったい何処で処理が止まっているのかも分かりません。 それじゃあ、デバッグの意味がありません。 そもそもなぜ、デバッグモードで"ブレイク"するのですか? (というか、デバッグモードでブレイクっていう意味が分かりません。) 1行実行していくのでは? それで、コードを順に追っていくのでしょう? >どのタイミングで上記メッセージが出ているのか、 そんなことコードも何も見ていない回答者が答えられるはずがありません。 とにかく、1行実行してご自分で見つけて下さい。 あと、 >フロッピーディスクへのアクセスは、 >CommonDialogの .showsave メソッドを使用しています。 CommonDialogは、保存先のパスを文字列として取得するだけで、保存動作自体とは関係ありません。 ところで、保存したら自動的にプログラムが終わるようになっているのでしょうか? それなら、終了前にフロッピーを抜く行為自体が間違いだと思います。 そうでないなら、保存処理が終わったら、フロッピーへのアクセスを止めればいいだけです。 (どういう処理をしているか分かりませんが) どんなファイルをどういうコードで保存しているのか分からないと詳細な回答をしようがありません。

minamotono
質問者

補足

なるほど、ご指摘ごもっともです。 ファイル保存処理のコードは以下のような感じです。 細かなエラー回避とかは省いています。 -- (コード開始) -- Dim lintFreeFile as Integer Dim lstrDataPath as String lstrDataPath = CommonDialog.FileName lintFreeFile = FreeFile Open lstrDataPath For Output as lintFreeFile Write #lintFreeFile, データ項目1,データ項目2・・・ Close lintFreeFile -- (コード終了) -- 一行ずつ実行したところ、ファイル保存処理のプロシージャは問題なく実行されました。 最期にプログラム終了処理を行うのですが、 終了処理ではプログラムを終了させるためにメインフォームからUnload Meを発行しています。 Unload Me発行後、同じプロシージャで使用しているFileSystemObjectを解放した後、End Subで呼び出し元に返って呼び出し元(同じForm)のEnd Subまで実行した時点で上記エラーメッセージが表示されました。 もしかしたらプログラムを終了させる手順?に大きな勘違い or ミスがあるのかもしれません。 プログラムとしては、フロッピーに保存する機能もあるというだけで、自動保存するわけではありません。 あくまでユーザーが保存し終わったらディスクを抜き、その後、プログラムを終わらせるという流れも当然あるということです。 自分ではフロッピーディスクにアクセスしたという情報が残っていて、その解放をしていない? のが原因なのではないか、と推測しているのですが、何かヒントでもいただければ幸いです。 宜しくお願い致します。