掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
エラーメッセージの意味は? (ID:140905)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> 1、このエラーメッセージの意味を教えてください。 ActiveX コンポーネントを呼び出す際に、呼び出し先から一定時間応答がない(ビジー状態)と発生します。 たとえば、プログラムから Excel を操作するような場合、起動した Excel で長い計算処理や保存処理を行っていたり、あるいはファイル保存画面などでユーザー応答を待っている最中に、Excel のプロパティやメソッドを呼び出そうとした時などにも発生する事があります。 あるいは、開発環境から F1 キーでヘルプを表示させる際に、ヘルプの起動に長い時間がかかってしまった場合、ヘルプの起動中に VB 開発環境をアクティブにしようとすると、そのメッセージが表示される事があります。 > 2、エラーメッセージを出しているモジュールは、windowsですか?VBですか? メッセージそのものは、ActiveX コンポーネントの呼び出し元(通常は VB)が発していますが、その原因は呼び出された側(OLE サーバー/オートメーション サーバー)にある可能性があります。 > 3、App.OleRequestPendingTimeout=5000 (ディフォルト) > App.OleServerBusyTimeout=10000(ディフォルト) > となっていますが、この値はどのように遣われているのでしょうか? 前者は 5 秒、後者は 10 秒に設定されていますね。 たとえば、ActiveX コンポーネントのプロパティやメソッドを呼び出した後、その結果が返ってくるまで、長い時間——たとえば 60 秒かかってしまう場合を想定してみてください。 ActiveX の呼出し後、VB の画面を触る(キーボード入力/マウス入力)と、この場合は 60 秒経過するまで、それらの入力が処理されない事になってしまいます。 そこで VB は、OleRequestPendingTimeout で指定された時間以内に、処理が完了しなかった場合、その事をメッセージボックスで通知します。 そのメッセージの表示後、そこからまた OleRequestPendingTimeout の分だけ同じように待機し、その間にまた VB 側に入力があれば、メッセージで問い合わせるという行為を繰り返します。 そうした待機処理を繰り返し、ついには OleServerBusyTimeout で指定された時間まで待っても処理が終わらない場合、これ以上待ち続けるかどうかを確認するために、ここで「再試行」と「キャンセル」ボタンを持ったメッセージボックスを表示させてきます。 ここで再試行を行えば、そこからまた待機処理が繰り返されます。そしてキャンセルを押せば、そのメソッド呼び出しが拒否された物として扱われ、実行時エラー(Err.Number = &H80010001)として処理されます。 なお、これらのメッセージを変更したい場合には、 App.OleRequestPendingMsgTitle App.OleRequestPendingMsgText App.OleServerBusyMsgText App.OleServerBusyMsgTitle App.OleServerBusyRaiseError などを使う事ができます。 Option Explicit Private Excel As Object Private Sub Command1_Click() On Error Resume Next App.OleRequestPendingTimeout = 2000 App.OleRequestPendingMsgText = "まだ終わらんよ" App.OleServerBusyTimeout = 10000 App.OleServerBusyMsgText = "これで終わりにするか、続けるか" Set Excel = CreateObject("Excel.Application") Excel.Visible = True MsgBox "Excel で、[ファイルを開く]の画面を開き、その画面を表示させたまま、このメッセージボックスを閉じてみてください。", vbSystemModal Or vbInformation On Error Resume Next Excel.Quit If Err.Number <> 0 Then MsgBox Err.Description, vbExclamation, Hex(Err.Number) End If End Sub
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.