RTD サーバーを Excel のインスタンスを複数に更新通知を送信しません

文書翻訳 文書翻訳
文書番号: 284883 - 対象製品
すべて展開する | すべて折りたたむ

目次

現象

で、RealTimeData (RTD) サーバーを組み合わせて Microsoft Office Excel の複数のインスタンスを使用することがありますメッセージの次。
リアルタイム データ サーバー 'servername.classname' が応答していません。 サーバーを再起動しようとする Microsoft Excel しますか?
したがって、RTD サーバーは、Excel の複数のインスタンスに更新通知を送信できません。

原因

このメッセージ RTD サーバーが、ActiveX EXE のインスタンスを生成すると、Visual Basic での ActiveX EXE プロジェクトの既定の設定である MultiUse 組み込まれている場合。 MultiUse が ActiveX EXE はクライアントの間で共有できます。 別の Excel インスタンス RTD サーバーを共有できません。 Excel の起動時に RTD サーバーが、Excel、RTD サーバー ServerStart メソッドを呼び出してし渡します コールバック オブジェクトへの参照 Excel のインスタンス。 そのため、Excel の 2 つのインスタンス、同じ RTD サーバーを共有する場合、2 番目のインスタンスは、最初のインスタンスの コールバック オブジェクトを置き換えます。 この動作が無効、1 つ目のインスタンスの コールバック オブジェクトになります。

解決方法

SingleUse インスタンスの Excel で RTD サーバーとして機能する ActiveX EXE コンポーネントを使用します。 Excel の各インスタンスが、RTD の独自のインスタンスをビルドすると ActiveX EXE コンポーネント SingleUse としてサーバー。

別のソリューションには、ActiveX EXE ではなく、RTD サーバーを ActiveX DLL を使用します。 Excel の各インスタンスは、RTD サーバーの独自にインスタンスを常に持つ、そのクライアントと同じプロセス空間で ActiveX DLL を読み込む.

詳細

この問題を再現する手順

  1. Visual Basic では、作成、新しい ActiveX EXE プロジェクトです。
  2. [ プロジェクト ] メニューの [ 参照設定 ] をクリックします。
  3. Microsoft Excel 2002 オブジェクト ライブラリ ] を選択し、 [OK] を実行します。
  4. [ プロジェクト ] メニューの [ Project1 のプロパティ ] をクリックします。
  5. "RTDExe"に、[プロジェクト名を変更する [ OK] をクリック します。
  6. 「例」には、 Class1 クラス モジュールの 名前 プロパティを変更します。
  7. クラス モジュールに次のコードを追加します。
    Option Explicit
    
    Implements IRtdServer  'Interface allows Excel to contact this RealTimeData server.
    
    Dim nCounter As Long
    
    Private Function IRtdServer_ConnectData(ByVal TopicID As Long, Strings() As Variant, _
       GetNewValues As Boolean) As Variant
        IRtdServer_ConnectData = nCounter
    End Function
    
    Private Sub IRtdServer_DisconnectData(ByVal TopicID As Long)
        nCounter = 0
    End Sub
    
    Private Function IRtdServer_Heartbeat() As Long
        'Do nothing.
    End Function
    
    Private Function IRtdServer_RefreshData(TopicCount As Long) As Variant()
        Dim aUpdates(0 To 1, 0 To 0) As Variant
        nCounter = nCounter + 1
        aUpdates(0, 0) = 0   'For this sample, we only refresh topic id = 0
        aUpdates(1, 0) = nCounter
        TopicCount = 1
        IRtdServer_RefreshData = aUpdates
    End Function
    
    Private Function IRtdServer_ServerStart(ByVal CallbackObject As Excel.IRTDUpdateEvent) As Long
        nCounter = 0
        Set oCallBack = CallbackObject
        g_TimerID = SetTimer(0, 0, TIMER_INTERVAL, AddressOf TimerCallback)
        If g_TimerID > 0 Then IRtdServer_ServerStart = 1       'Any value <1 indicates failure.
    End Function
    
    Private Sub IRtdServer_ServerTerminate()
        KillTimer 0, g_TimerID
    End Sub
    					
  8. [ プロジェクト ] メニューの [ 標準モジュールの追加 します。
  9. 新しいモジュールに次のコードを追加します。
    Public Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, _
       ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
    Public Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
    
    Public Const TIMER_INTERVAL = 5000
    Public oCallBack As Excel.IRTDUpdateEvent
    Public g_TimerID As Long
    
    Public Sub TimerCallback(ByVal hWnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, _
       ByVal dwTime As Long)
        oCallBack.UpdateNotify
    End Sub
    					
  10. [ ファイル ] メニューの [ RTDExe.exe の作成 、コンポーネントを作成する] をクリックします。
  11. Excel では、新しいブックを作成します。
  12. セル A1 に次の式を入力します:
    =RTD("RTDExe.Example",,"X")
    0 を返します。
  13. 後 5 秒、A1 の単位をサーバーが更新プログラムの Excel に通知することを示す値。
  14. Excel の別インスタンスを起動して、新しいブックを追加します。
  15. セル A1 に次の式を入力します:
    =RTD("RTDExe.Example",,"X")
    0 を返します。
  16. Excel の 2 番目のインスタンスの A1 の値を更新し続けます。 最初のインスタンスの A1 の値はありません。 ハートビートの間隔が経過 (15 秒が既定値)、Excel の最初のインスタンスには、次のエラー メッセージが表示されます。
    リアルタイム データ サーバー 'rtdexe.example' が応答していません。 サーバーを再起動しようとする Microsoft Excel しますか?
    [Yes/はい] をサーバーの再起動] をクリックする Excel の最初のインスタンスの更新を受信する場合、サーバーからの通知します。 ただし、Excel の 2 番目のインスタンスは、サーバーの再起動後し同じメッセージを生成、ハートビート間隔に達した後。
問題が解決するはこのエラーを受け取らないようにするには Visual Basic でプロジェクトに切り替えて、 SingleUse ] に、 のクラスの Instancing プロパティを変更をし、RTD サーバーを再構築します。

関連情報

関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください:
285339RealTimeData サーバーを Excel で作成する方法

プロパティ

文書番号: 284883 - 最終更新日: 2007年5月14日 - リビジョン: 3.2
この資料は以下の製品について記述したものです。
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Visual Basic 6.0 Professional Edition
キーワード:?
kberrmsg kbprb kbpending kbmt KB284883 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:284883
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com