- ベストアンサー
タスクスケジューラでVB6のプログラムが実行しない
VB6で作ったプログラムをWindows7において、タスクスケジューラで起動させたが、実行しない。 フォ-ムは1個だけで、その中のACTIVATEから、同フォーム内のルーチンを呼び出して目的の動作をさせるようになっています。手動で起動させると、目的の動作をして終了するが、タスクスケジューラではフォームを表示した状態で止まっている。そのフォームをクリックすると目的の動作を行う。なお、フォームはその時実行されている別のVB6のフォームの前面[最前面)に表示されている。目的は1日1回自動的に特定ファイルの状態を調べたいだけです。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
フォームが最前面になっているが、アクティブになっていないからです。 >>その中のACTIVATEから Private Sub Form_Load() に変えたら動きます。 http://hm.cocolog-nifty.com/hmpage/2009/03/windows-7-vb6-2.html
その他の回答 (2)
- chibita_papa
- ベストアンサー率60% (127/209)
起動時に Me.Show DoEvents 追加してください。
お礼
ご指摘の方法で、確かにフォームが表示されました。 メインフォームが最初に表示される過程は制御できないと思い込み、一度も試しておりませんでした。 コロンブスの卵のようなことでしたが、これで全て問題が解決しました。 ありがとうございました。、
- nmktksk
- ベストアンサー率36% (75/208)
VB6は7とvistaには対応していません。 実行ファイルを右クリックのプロパティの互換性で互換モードXPを 選べばできるかもしれません。
お礼
早速の回答をありがとうございます。 実行したい環境が職場のコンピュータで、今テストできません。月曜日に早速やってみます。 VB6がVistaなどに対応していないことは知っていましたが、自作のプログラムが一部の機能を除いては問題なく動くので、互換性のことはうたがはず、何か設定の問題でもあるのかと思っていました。 結果が出ましたら、報告します。
補足
Windows7とVISTAで試しましたが、全く同じ症状でした。なお、No.2の方の方法で、問題はあるものの、実行できましたので、タスクスケジューラはACTIVATEまでは実行しないということのようです。(VB2000など互換性のあるものでは実行できるのかわかりませんが)。ありがとうございました。
お礼
回答ありがとうございます。 今回のプログラムは Private Sub Form_Load() (変数の定義などを行っている) Private Sub Form_Activate() の両方を入れています。 VBAのプログラムではLoad、Activateと実行され、ここでフォームが表示されているようなので、VB6も同じと思い、Activateのところで実際の動作をさせています。(VBAの場合はLoadのところではフォームが表示されませんでした。) 実行環境が職場なので、月曜日にテストしてみます。 ありがとうございました。
補足
指摘の方法でWindows7とVISTAで実行されることが確認できました。ついでにInitializeでも起動されることが確認できました。実用的にはこれで十分なのですが、実行中、画面にフォームが表示されないなど、起動していることが全くわからない状態でした。起動は、当方のVB6プログラムがログファイルを作成するので、それを調べて確認しました。 当初Activateのところで実行したかったのは、フォームを画面に表示して、実行している様子を見たいためでした。このようなことは出来ないのでしょうか。また、フォームが表示されていない状態(Load または Initailize の段階で)、フォーム内のラベル等に書き込みを行っています。今回エラーはでませんでしたが、特に問題は無いのでしょうか。 よろしくお願いします。