• ベストアンサー

VB6でEndステートメントに変わる方法

VB6を使っております。 Endコマンドを使わずに、Unloadイベントで開いているフォームを閉じていく処理にするのが、定跡とされていますが、OnErrorGotoで飛んだ先でResume Nextではなくて、終了させたい場合は、私はENDステートメントを使っておりますが、 Unload meでイベントを発生させても エラー時には終了できません。 Endステートメントに変わる方法で終了させることは可能でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.1

Unloadを行ってもプログラムの実行が終了するとは限りません。オブジェクトへのリファレンスが残っているとプログラムは終了しません。 Unloadを行っても終了できないのがエラー発生時のみかどうかは確認されましたでしょうか。同じようなタイミングで、エラー非発生時にUnloadを行っても同じように「プログラムが終了しない」ということはないでしょうか。 そのあたりをご確認ください。

関連するQ&A

  • EXEでのENDステートメント動作

    VB6.0(SP5)を使用しています。OSはXp Proです。 自作アプリのEXEでの動作で困っています。ENDステートメントが正常に機能しません。 MDIフォームで、メインフォームのLoad中、何らかのエラー(DLLの初期化失敗など)が発生した場合に、ENDステートメントでアプリケーションを終了させています。 VBでデバッグさせている状態だと問題無く終了します。 しかし、コンパイル後のEXEで動作させると必ずメインMDIフォームを表示(起動?)します。 この時に起動されるメインMDIフォームは、各種メニュー等は起動不可で、右上×印の終了ボタンのみ機能します。 ToolBarコントロールを使用しているか否かで、症状が変わります。 (1)MDIフォームにToolBarコントロールを組み込んだ状態  上記、MDIフォームが表示される現象が発生します。 (2)MDIフォームにToolBarコントロールを組み込んでいない状態  正常に終了します。 ToolBarコントロールのプロパティを何か変更する必要があるのでしょうか? 自作アプリだけの問題かとも思い、下記のような単純サンプルを作成して確認しましたが、EXEで動作させるとやはり同様の症状が発生します。 ------------------------------------------------- Private Sub MDIForm_Load() End  '何もせずに終了する筈。 End Sub ------------------------------------------------- ENDステートメントの直前で、何か実行する必要があるのかと思い、下記のようにも試してみました。 1)ToolBarを非表示にする。 Toolbar1.Visible = False 又は Set ToolBar1 = Nothing END  '何もせずに終了する筈。 結果:ツールバーが非表示になるだけで、メインMDIフォームは表示されます。 2)メインMDIフォームを無効にする。 MDIForm1.Enabled = False END  '何もせずに終了する筈。 結果:我ながらマヌケですが、メインMDIフォームが表示され、尚かつ×印すらクリック不可でした。 3)メインMDIフォームを非表示にする。 MDIForm1.Visible = False END  '何もせずに終了する筈。 結果:MDIフォームが非表示となり、一見、よさそうですが、タスクマネージャで確認すると、該当アプリのタスクは終了はしていませんでした。 その他、ENDの代わりに、STOPを使用してみました。 この場合は、STOP実行時に「STOPステートメントで中断しました」とのメッセージが表示され、OKボタンで、やはりメインMDIフォームが表示されます。 どなたか、MDIフォーム+ToolBarコントロールを組み込んだ状態で、正常にENDステートメントを動作させる方法を教えてください。(EXEでの動作です。) また、VBでデバッグさせている状態だと問題無く終了するのは何故なのでしょうか?。 よろしくお願いします。

  • vb製EXEが終了しない

    XPでVB6.0のアプリを作っているのですが、unloadや×ボタンで終了しなくなってしまいました。 Form_Unloadにブレークを貼って調べようとしたのですが、ブレークで止まるのですが、そこからIDEの操作が全くできなくなります。 タスクバーでIDEを右クリックし、閉じる(C)を選ぶと終了します。 また、EndステートメントをForm_Unloadに書くと終了します。ただし、EndステートメントだとIDEも終了してしまいます。 終了しなくなった原因ってなんなんでしょうか。

  • access Unload ステートメント 

    Unload ステートメントじゃダメな理由を教えてください エクセルの場合は Unload UserForm1 でフォームを閉じれますが、 アクセスは このオブジェクトは、ロードまたはアンロードすることはできません。(Error 361) になります。 ヘルプには Load ステートメントまたは Unload ステートメントで参照しているオブジェクトまたはコントロールが無効です。 と記載されていますが、「オブジェクトまたはコントロールが無効」なのでしょうか? DoCmd.Close acForm, "フォーム1" これで閉じられるからいいのですが、なぜUnload ステートメント が使えないのか気になります。

  • [VB6] フォームを閉じる方法について

    お世話になります。 VB6で別フォームを起動する際の親フォームの閉じ方について 質問させてください。 呼び出し元フォームからShowメソッドで別フォームを起動すると、 呼び出し先のフォームでマウスのカーソルが砂時計表示になってしまいます。 (呼び出し元のフォームはUnload Meで閉じています。) [Form1の処理] Private Sub Button1_Click() Form2.Show Unload Me End Sub ※Form1は呼び出し元。Form2は呼び出し先。 原因について、どなたかご存知の方がいらっしゃいましたら、 ご教授願えますか?

  • プログラム終了時のデータ送信処理@VB6

    プログラム終了時のデータ送信処理@VB6 複数のフォームがあり(A-Z)プログラム終了の際はどのフォームがアクティブであっても、 かならずフォームAをアンロードするようにプログラムされています。 フォームAにはWinsockコントロールが2個使われておりフォームがアンロード(UnloadまたはUnloadQuery)される際には相手先にCLOSEとDISCONNECTを送信するようにくみます。 このときに、 送信コマンドをForm_QueryUnloadイベントに組み込んだところデータが送れませんでした。 もちろんForm_Unloadでも送れませんでした。 アンロード時にデータを送信するにはどうすればよろしいでしょうか? ご助力お願いします

  • ActiveXコントロールの作成(VB6)

    こんばんは。 今、VB6でActiveXコントロールを作成しようと思っています。 現在、標準EXEにて、プログラムが作ってあります。 動作としては、 1.スタートボタン(CmdStart)で開始 2.処理(外部の測定器によるデータ収集) 3.終了ボタン(CmdEnd)にてプログラム終了 です。 これをもとに、ActiveXコントロールを作成したいです。手元にある文献にしたがってほぼコピー&ペーストで作成しました。また、これの動作を調べるため、標準EXEのフォームを作成し、そのフォームにActiveXコントロールを貼り付けました。 ここで質問です。 Form_LoadはUserControl_Initializeに書き換えました。(これは文献に載っていました) 最後のプログラム終了がうまくいきません。 標準EXEでは Private Sub CmdEnd_Click() Unload Me End Sub と書いてプログラムを終了させていました。 ここを書き換えずにActiveXコントロールを実行させたらエラーが出ました。"Unload Me"を"End"に書き換えてみたら、サポートされていないと出ました。 CmdEndをクリックしてプログラムを終了させるにはどう書けばいいでしょうか? よろしくお願いします。

  • VB.NET クラス内でプログラムを終了するには?

    VBAでは、エラーでプログラムを終了する時には Endステートメントを記述していましたが、 このVBAをVB.NET(クラスライブラリ、DLL)に 書き換えていますが VB.NETでClass1クラスの中にtest()メソッドを作って この中にEndステートメントを記述すると 「クラスライブラリプロジェクトで  Endステートメントを使用することができません。」 というメッセージが表示されますが エラーでプログラムを終了するには どのように記述すればいいのでしょうか。 Public Class Class1  Public Sub test(ByVal a As String)   If a = "" Then    MsgBox("致命的なエラーです")    End <===エラー発生   End If  End Sub End Class よろしくお願いします。(WindowsXP,VS2010)

  • VB2010 フォームのリロード

    今までVB6.0でプログラミングをしていた者で、最近VB2010に開発環境を変えました。さっそくソフトを開発しているのですが、フォームのリロードが必要なところがあったためそこのプログラムをネットなどで参考にして書いてみたのですがどうしてもエラーがでます。 今までVB6.0ではその部分を Private Sub Command1_Click() Set Form1 = Nothing Call Unload(Me) Form1.Show End Sub と、記載していました。これをVB2010のコードに書き換えるとどのようになるのでしょうか。 ご回答よろしくお願いいたします。

  • 複数フォームを1ボタンクリックで終了させる方法

    VB6.0 WindowsXP (症状) 複数フォームを1クリックで終了できずに困っています。 理由は他のフォームに移ったときにボタンの位置やテキストの内容を残しておきたい為にunloadさせずに、 Me.Hideだけでフォームを移動しているためだと思います。 終了のときは、下記のコードを用いて、終了させています。 標準モジュールに Public Sub sAllEnd() Dim myObject As Object For Each myObject In Forms Unload myObject Set myObject = Nothing Next End Sub をおいて、 各フォームには Private Sub Form_Unload(Cancel As Integer) Dim myResult As Integer myResult = MsgBox("終了します。" & vbCrLf & "よろしいですか?", vbOKCancel + vbQuestion, "終了確認") If myResult = vbCancel Then Cancel = True End If Call sAllEnd End Sub 終了メッセージのOKボタンを開いたフォームの枚数分だけクリックしないと終了できない状態です。 これを1クリックで終了できるようにするためにはどうしたら良いでしょうか? よろしくお願いします。

  • 終了してもプログラムが実行したまま(VB)

    非常に時間のかかる繰り返し処理を行なうプログラムを作りました。どのくらい、プログラムが進行しているのかわかりやすくするため、 Progress.Show でProgressという名前のフォームを表示し、そこに、プログラムが何%終わったのか表示するようにしました。 プログラムはDo Loop文が使ってあるので、何%終わったのかを表示するためにLoopした回数を取得して、それをフォームに表示することにしましたが、どこかで調べたら機械は、Do Loopのあいだはフォーム上に文字を表示するのに手が回らないからDoEventsを使ってイベントを実行させなさい、といわれました。 そこまではうまくいきました。プログラムを実行すると、プログラムが実行されて何%終わったかもちゃんと表示できるようになりました。 ところが、プログラムの実行中にフォームの右上の×ボタンを押したところ、フォームは画面から消え、プログラムが終了したように見えるのに、VB Editorでは[実行中]となっており、終わってくれません。ずっとDo Loopが実行されたままです。 Private Sub Form_Terminate() のところに Unload Progress と書いても、「Unloadメソッドは使えません」などというエラー・メッセージが出ます。(フォーム上にボタンを置き、そこをクリックするとUnloadするようにしてみましたがやはり同じことを言われました。) 原因は何でしょうか? フォームをUnloadする、ということの意味をちゃんと理解していないのでいけないのだと思うのですが、調べてもよく言っていることがわかりません。 よろしくお願いします。

専門家に質問してみよう