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

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

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 ExplicitImplements IRtdServer  'Interface allows Excel to contact this RealTimeData server.Dim nCounter As LongPrivate Function IRtdServer_ConnectData(ByVal TopicID As Long, Strings() As Variant, _   GetNewValues As Boolean) As Variant    IRtdServer_ConnectData = nCounterEnd FunctionPrivate Sub IRtdServer_DisconnectData(ByVal TopicID As Long)    nCounter = 0End SubPrivate Function IRtdServer_Heartbeat() As Long    'Do nothing.End FunctionPrivate 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 = aUpdatesEnd FunctionPrivate 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 FunctionPrivate Sub IRtdServer_ServerTerminate()    KillTimer 0, g_TimerIDEnd 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 LongPublic Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As LongPublic Const TIMER_INTERVAL = 5000Public oCallBack As Excel.IRTDUpdateEventPublic g_TimerID As LongPublic Sub TimerCallback(ByVal hWnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, _   ByVal dwTime As Long)    oCallBack.UpdateNotifyEnd 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 で作成する方法
rtdserver realtimedata リアルタイム データ サーバー リアルタイム rtd prb XL2002 XL2002 欠けます XL2007

警告: この資料は、自動翻訳されています

プロパティ

文書番号:284883 - 最終更新日: 01/12/2015 17:24:08 - リビジョン: 3.2

  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • kbnosurvey kbarchive kberrmsg kbprb kbpending kbmt KB284883 KbMtja
フィードバック