• ベストアンサー

VB6プログラムの実行中でのこと

VB6で作成したプログラムを実行していると、突然フリーズしたように 約10秒程止まる場合があります。一度、この現象が現れるとそれ以降は普通に 動作します。 実行するたびにこのようになります。 考えられる原因や対応方法などありましたら教えてください。

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

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.5

今読み直して気が付いたのですが、、、 >止まる時は決まっていないのですが、Tabキーでの移動やコマンドボタンを >クリックした時が多いような気がします。 もしかしてですが・・・・ SetFocusやGotFocus/LostFocusのイベント類を使用していませんか? もし、コントロールAがフォーカスを受けた時、処理によってはコントロールBにフォーカスを移動させるなど・・・ フォーカス永久ループっていうことも考えられます。 以前に書いたように、1度目と2度目の実行は、メモリにロードされていない/されているという違いがあります。 よって、1つの処理についてのPCへの不可が比べ物にならないくらいかかります。 先に挙げたGotFocus/LostFocusイベントは、OSの状況によって左右されることもあります。 フォーカス永久ループの調査方法として、各GotFocusイベントにDebug.Print ActiveControl.Nameなどと記してみてください。 それと、、、思い出したのでついでに書いておきます。 Command1.FontBold = True とかしてませんか? 以前に経験したのですが、VB4ならこれでよいのですが、VB6のときたまにフォーカス永久ループになった経験があります。 Command1.Font.Bold = True とすることで回避できました。 FontBoldとFont.Boldの違いが、HP上では違いがわかりづらいですね。 一度、このページをテキストか何かにコピペして読んだらわかりやすいかも?

yukotoaiko
質問者

お礼

前回に頂いた回答と合わせてお礼を申し上げます。おかげさまで私自身、たくさんの勉強になりました。本当にありがとうございます。 前回の回答でご指摘のあった点で、その通りの指摘事項がありました。 ・DBを使っています。 ・たくさんのコントロールを使っています。 ・EXEの容量も大きいような気がします。約750KB位です。初心者の本を参考に、初めて作ったプログラムなので分割の方法があるということはわかりませんでした。やり方もわかりません。 そして、今回の回答にも私はびっくりしています。まさにその通りです。初心者のはずかしいプログラムを見られているようです。 SetFocusもCommand1.FontBoldも使っています。 回答して頂いた内容をそのまま使用してみることにします。 助かっただけでなく、勉強にもなり、ご親切にありがとうございました。

その他の回答 (4)

  • haporun
  • ベストアンサー率40% (230/562)
回答No.4

サスペンドしてるHDDの復帰だったりして・・・。

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.3

前回の発言は、1度目と2度目の実行時の差を説明しました。 >VB6で作成したプログラムを実行していると、突然フリーズしたように VBだからそうなるとは考えにくいですよね ^^; VBで作ったソフトだからそうなるとは、聞いたことがありません。 そちらの状況が良くわからないため、その1度目になぜそのような状況になるのかわかりません。 考え付くのは「環境」「プログラムの作り」ぐらいです。 以下に想像されることを書いておきます。 ※1.ソフトを起動しているPC環境 一.メモリが少なくないですか? 二.CPUが古いタイプではないですか?? 三.OSがインストールされているドライブの空き容量が少なくなってませんか? 四.常駐ソフトが多数起動中ではないですか? ※2.もし環境に問題がなければ、プログラムの作りに問題があると思われます。 一.DBを使用していますか? 二.画像/アイコンなどをたくさん使用していませんか? 三.コントロール類を多様していませんか? 四.FileSystemObjectを使用してませんか?(ルートを参照するとたまに重くなります) 五.PCが起動してすぐに立ち上げてませんか?(HDDにがビジー状態でないときに起動したほうがよいですよね) 六.コンパイル後のEXEの容量はいくつですか?(大きいEXEなら、機能分割をした別EXEにする方法もあります) 七.OLEオブジェクトを使用したフォームをロードしてませんか?(外部アプリの埋め込みは、結構処理が重いです) 八.市販のDBGridのようなもの(名前を書きたいけれど、批判されそうなので、名前は伏せます)を使用していませんか? 一番の解決方法は、ソースをここで公開することかも?

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

いろいろなことが考えられます。 起動時の処理が重ければ重いほど、2回目以降と差が生じます。 OSのメモリに一度ロードされたものは、メモリに残っている時はプログラムを毎回見に行かず、メモリを参照します。 なので、2回目以降は早くなることも考えられます。 あるいはDBに接続を行っている場合もそうです。これはスペックが低いPCほど、初回と2回目以降に差が生じます。 WinNTやWin2000を使用したことがあるのであればわかると思いますが、最初のログイン時と、ログオフして再ログインするのとでは、起動速度が違います。常駐ソフトの立ち上がりが違うからです。 一番の回避方法は、無駄にメモリを消費するようなプログラムを作成しないように努めることです。そうしたら、他のプログラムを邪魔をしないし、OSがメモリを参照しないでプログラムを見ていても、実行速度の差が少なくなります。 でもやはり、どんなプログラムを見ても、メモリ参照に勝るものはないですね。

yukotoaiko
質問者

お礼

実行した途端に現象がでることもあります。 止まる個所はまったく決まっていないのですが。 メモリの問題なのでしょうか。 メモリの問題があるということを初めて知りました。 回答してくださってありがとうございました。

  • ponnta
  • ベストアンサー率17% (31/179)
回答No.1

長いループ処理などがあると他のアプリケーションに処理が移らなくなります。 そんなときは DoEvents関数をつかいます。

yukotoaiko
質問者

補足

止まる時は決まっていないのですが、Tabキーでの移動やコマンドボタンを クリックした時が多いような気がします。 プログラムでの処理で止まっている感じではないようです。 説明が足りなくてすみませんでした。

関連するQ&A

  • VB6のプログラムの実行

    VB6で作成されて古いマシン(windows2000)で動作している プログラムをWindowsXP Service Pack3にコピーして実行 しようとすると起動時に以下のエラーが出て立ち上がりません。 ------------------------------------- 実行時エラー '5'; プロシージャの呼び出し、または引数が不正です ------------------------------------- http://support.microsoft.com/kb/811469/ja 上記HPの方法は試したのですが、ダメでした。 尚、ソースが無い為、どこで落ちてるか確認出来ません。 何か分かる所は無いでしょうか? (ちなみに基本的にVB6の動作って、OSの種類やバージョンや、 ServicePaceやWindowsUpdateに影響されると  考えてよろしいのでしょうか?)

  • VB6.0で実行の度に異なるエラー

    VB6.0,Windows2000で作成したプログラムについてなのですが,立ち上げなおして実行する度に「実行時エラー'6' オーバーフローしました」「インデックスが有効範囲にありません」等のエラーが出て実行できない場合と,正常に実行できる場合があります. (実行の度に実際に異なるエラーが発生している訳ではないと思います) このような現象は何が原因だと考えられるのでしょうか. ご存知の方ご教授ください.

  • VBプログラムの終了

    VB6.0で作成した実行ファイル(exe)を終了させても タスクマネージャのプロセスに残ってしまい、 もう一度プログラムを起動することができません。 (プログラムで二重起動防止の処理をしています) このプログラムをVBのラインタイムが入っていない マシンで動かしているのですが、 やはりそれが問題なのでしょうか? それとも別に何か原因があるのでしょうか?

  • VB.NetのプログラムでVB6.0のプログラム2

    お世話になります。 VB.Netで作成されたプログラムAがあります。 VB6.0で作成されたプログラムBがあります。 プログラムBはイベント待ち状態になっており、特定のイベント(ボタンクリックイベント等)で特定のプロシジャーを実行するようになっております。 プログラムAからプログラムBの特定のイベントを発生させる、もしくはプログラムBの特定のプロシジャーを実行させる方法を探しております。 前回同じような質問をさせていただきましたが、こちら側からWindowsイベントとVB6.0のイベントの指定の説明が抜けておりましたので、改めて質問をさせていただきます。 何卒よろしくお願い申し上げます。

  • タスクスケジューラでVB6のプログラムが実行しない

    VB6で作ったプログラムをWindows7において、タスクスケジューラで起動させたが、実行しない。 フォ-ムは1個だけで、その中のACTIVATEから、同フォーム内のルーチンを呼び出して目的の動作をさせるようになっています。手動で起動させると、目的の動作をして終了するが、タスクスケジューラではフォームを表示した状態で止まっている。そのフォームをクリックすると目的の動作を行う。なお、フォームはその時実行されている別のVB6のフォームの前面[最前面)に表示されている。目的は1日1回自動的に特定ファイルの状態を調べたいだけです。 よろしくお願いします。

  • VBプログラムについて

    テキストデータを取り込み、そのデータをもとに 表を作成し、Excelシートに出力するという VBプログラムをOS Windows2000、VB6.0(SP5)、Excel2000の環境で作成しました。 このプログラム(exe)をOS Windows95、Excel2000上で 動作するのでしょうか? また、動作させる場合にはどういった注意点が必要でしょうか? ちなみにそのプログラムではADO 2.6も使用しています。 どうぞよろしくお願いします。

  • VISTAでのexeファイルの実行について

    システム運用管理に携わっている者です。 VISTAでのプログラム実行の動作について教えてください。 ユーザ権限で、あるプログラム(VB.NETで作成されたexeファイル)を 実行すると何も起きません。同じプログラムを「管理者として実行」 で実行すると、管理者のパスワードが要求され、入力すると正常に 動作します。 やりたいことは、ユーザ権限でパスワードの入力なしでこのプログラム を実行することなのですがどうすればよいかわかりません。 なお、別の部署のVISTAのパソコンではこの現象は発生しません。 2台のパソコンは共に購入したままの状態ですので、特に設定をした というようなことはないと思います。 大変困っていますので、どなたか原因と対応方法をご教示いただけない でしょうか。 不要な情報かもしれませんが、ウィルス対策ソフトは、 ノートンアンチウィルス2007です。 よろしくお願いいたします。

  • 実行時にVBのモジュールファイルを読み込んで実行する方法

    VB.netで作成したプログラムで、実行時に、ユーザが作成した*.vbファイル(VB.netのモジュールファイル)を読み込んで実行するというものを見たことがあります。 モジュールファイルにはいろいろな関数が記述されておりました(関数名等は決まりがあるのかもしれません)。どのように処理しているのかさっぱり見当がつきません。自分で調べた範囲では「リフレクション」というキーワードが出てきましたがいまいちピンときませんでした。これができればプログラムを再コンパイルしなくても動作(の一部)を換えることができ便利です。参考になるようなサイトなどご存知でしたら教えてください。

  • VBからサーバーアップ&実行

    次のようなプログラムを作成しようとしてます。 ・インターフェースはVB ・VBでのボタンを押すとプログラム開始 ・開始すると、サーバーに指定されたプログラムをアップ ・サーバー上でそのプログラムを実行、結果をテキストファイルへ ・サーバーでのプログラム終了後、VB上で結果を表示 この中で、バッチファイルをVB上で呼び出せばサーバーにアップはできるのではないか・・・と思ってますが、アップの後実行する方法がわかりません。何か意見がありましたら教えてください

  • vb2005で作成したプログラムはどこに?

    vb2005で作成したプログラムはどこに? vb2005で作ったプログラムをビルド後に、 他のPCにsetup(インストール)したとします。 その場合、実行ファイル(.exe?)はどこにあるのでしょうか  また、コマンドプロンプトで実行ファイルを起動することは可能でしょうか