RTD-Server sendet keine Aktualisierungsbenachrichtigungen an mehrere Excel-Instanzen

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 284883 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Wenn Sie mehrere Instanzen von Excel zusammen mit Ihrem RealTimeData (RTD)-Server verwenden, erhalten Sie die folgende Meldung angezeigt:
Echtzeitdatenserver 'servername.classname' antwortet nicht. Möchten Sie Microsoft Excel versuchen, den Server neu zu starten?
Daher ist der RTD-Server keine Aktualisierungsbenachrichtigungen an mehrere Instanzen von Excel zu senden.

Ursache

Sie erhalten diese Meldung, wenn der RTD-Server eine ActiveX-EXE, die für MultiUse instancing ist, basiert die Standardeinstellung für ActiveX-EXE-Projekte in Visual Basic ist. ActiveX-EXE-Datei, die MultiUse können zwischen Clients freigegeben werden. Separate Excel-Instanzen können RTD-Server nicht freigeben. Beim Starten von Excel ein RTD-Server, Excel Ruft die RTD-Server ServerStart -Methode auf und übergibt Sie dann einen Verweis auf die CallBack -Objekt für diese Instanz von Excel. Wenn zwei Instanzen von Excel versuchen, denselben RTD-Server freizugeben, ersetzt die zweite Instanz daher das CallBack -Objekt für die erste Instanz. Dies macht das CallBack -Objekt für die erste Instanz ungültig.

Lösung

Verwenden Sie SingleUse instancing für ActiveX-EXE-Komponenten, die für Excel als RTD-Server fungieren werden. Wenn Sie ActiveX-EXE-Komponenten als SingleUse erstellen, verfügt jede Instanz von Excel eigene Instanz von der RTD-Server.

Eine andere Lösung ist die Verwendung einer ActiveX-DLL für den RTD-Server statt eine ActiveX-EXE. ActiveX-DLLs Laden in demselben Prozessbereich wie Ihre Clients, und jede Instanz von Excel hat immer eine eigene Instanz von der RTD-Server.

Weitere Informationen

Schritte zum Reproduzieren des Problems

  1. Erstellen Sie in Visual Basic ein neues ActiveX-EXE-Projekt.
  2. Klicken Sie im Menü Projekt auf Verweise .
  3. Wählen Sie Microsoft Excel 2002-Objektbibliothek , und klicken Sie dann auf OK .
  4. Klicken Sie im Projekt auf Eigenschaften von Projekt1 .
  5. Ändern Sie den Projektnamen, "RTDExe", und klicken Sie dann auf OK .
  6. Ändern Sie die Name -Eigenschaft des Klassenmoduls Class1 in "Beispiel".
  7. Fügen Sie den folgenden Code zu dem Klassenmodul.
    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. Wählen Sie im Projekt die Option Modul hinzufügen .
  9. Fügen Sie den folgenden Code in das neue Modul.
    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. Klicken Sie im Datei -Menü auf RTDExe.exe erstellen , die Komponente zu erstellen.
  11. Erstellen Sie eine neue Arbeitsmappe in Excel.
  12. Geben Sie in die Zelle A1 die folgende Formel ein:
    =RTD("RTDExe.Example",,"X")
    Die Funktion gibt 0 zurück.
  13. Nach fünf Sekunden, den Wert A1 Schritten, um anzugeben, dass der Server Excel von Updates benachrichtigen ist.
  14. Starten Sie eine andere Instanz von Excel, und fügen Sie dann eine neue Arbeitsmappe.
  15. Geben Sie in die Zelle A1 die folgende Formel ein:
    =RTD("RTDExe.Example",,"X")
    Die Funktion gibt 0 zurück.
  16. Der Wert in der zweiten Instanz von Excel A1 weiterhin aktualisieren. Aber nicht der Wert in der ersten Instanz A1. Nach der Takt Intervall abgelaufen (die Standardeinstellung ist 15 Sekunden), die erste Instanz von Excel zeigt die folgende Fehlermeldung:
    Echtzeitdatenserver 'rtdexe.example' antwortet nicht. Möchten Sie Microsoft Excel versuchen, den Server neu zu starten?
    Wenn Sie auf Ja , der Server neu gestartet klicken und die erste Instanz von Excel Update empfängt Benachrichtigungen vom Server. Jedoch nach dem Neustart des Servers, die zweite Instanz von Excel generiert dann dieselben Nachricht, nachdem das Taktintervall erreicht wurde.
Um das Problem zu beheben so dass Sie nicht diesen Fehler erhalten, wechseln Sie zu dem Projekt in Visual Basic, ändern Sie die Instancing -Eigenschaft der Example -Klasse in SingleUse und anschließend erneutes Erstellen des RTD-Servers.

Informationsquellen

Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
285339Zum Erstellen eines RealTimeData-Servers für Excel

Eigenschaften

Artikel-ID: 284883 - Geändert am: Montag, 14. Mai 2007 - Version: 3.2
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Visual Basic 6.0 Professional Edition
Keywords: 
kbmt kberrmsg kbpending kbprb KB284883 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 284883
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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