メッセージが表示されないようにする場合 (たとえば、カーソルを砂時計に変更した場合) は、App.OleRequestPendingTimeout
and notを使用しますApp.OleServerBusyTimeout
。
オプションで、 を使用して代替メッセージを設定することもできますApp.OLERequestPendingMsgText
。そうすることで、カスタム メッセージが [OK] ボタンだけでユーザーに表示されます。これにより、混乱が大幅に軽減されます。
サンプルコードは次のとおりです。
' set up special message if user interacts with application while waiting on the
' long-running operation to complete
' see http://support.microsoft.com/kb/138066
Dim originalOLEPendingMessage As String
originalOLEPendingMessage = App.OleRequestPendingMsgText
App.OleRequestPendingMsgText = "Please be patient while your request is processed."
Dim originalOLEPendingTimeout as Long
originalOLEPendingTimeout = App.OleRequestPendingTimeout
App.OleRequestPendingTimeout = 10000
On Error GoTo Finally
' Call long-running process here
Finally:
' If an actual error occurred we want to capture all the properties of Err
' so we can re-raise it after we clean up
Dim errNumber As Long
Dim ERRSOURCE As String
Dim errDesc As String
Dim errHelpFile As String
Dim errHelpContext As Long
errNumber = Err.Number
ERRSOURCE = Err.Source
errDesc = Err.Description
errHelpFile = Err.HelpFile
errHelpContext = Err.HelpContext
App.OleRequestPendingMsgText = originalOLEPendingMessage
App.OleRequestPendingTimeout = originalOLEPendingTimeout
If errNumber <> 0 Then
Err.Raise errNumber, ERRSOURCE, errDesc, errHelpFile, errHelpContext
End If
詳細については、Microsoft ナレッジ ベースの記事「OLE オートメーション サーバーのタイムアウトと同期を処理する方法」を参照してください。