RTD server neodesílá více instancí aplikace Excel upozornění na aktualizace

Překlady článku Překlady článku
ID článku: 284883 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Použijete-li více instancí aplikace Excel společně s RealTimeData (VTR) serveru, může se zobrazí následující zpráva:
Data v reálném čase serveru 'servername.classname' neodpovídá. Chcete, aby aplikace Microsoft Excel pokusit server restartovat?
RTD server tedy nelze odeslat upozornění na aktualizace více instancí aplikace Excel.

Příčina

Tato zpráva se může zobrazit, pokud je RTD server souboru EXE ActiveX, který je součástí pro použití pouze instance, MultiUse, což je výchozí nastavení pro ActiveX EXE projekty v jazyce Visual Basic. Soubor EXE ActiveX, který je MultiUse, může být sdílena mezi klienty. Samostatné instance aplikace Excel nelze sdílet servery RTD. Při spuštění aplikace Excel serverem VTR, aplikace Excel volá metodu RTD Server ServerStart a předá jej odkaz na objekt zpětného volání pro tuto instanci aplikace Excel. Proto pokud dvou instancí aplikace Excel se pokusí sdílet stejný server RTD, druhé instanci nahradí objekt zpětného volání pro první instance. Toto chování zruší platnost objekt zpětného volání pro první instance.

Řešení

Použít použití komponent ActiveX EXE, které bude sloužit jako servery RTD pro Excel pouze instance SingleUse. Při vytváření ActiveX EXE komponenty jako SingleUse, každá instance aplikace Excel má vlastní instanci prováděné serveru.

Jiné řešením je použití ActiveX DLL pro váš server RTD namísto ActiveX EXE. ActiveX DLL načíst ve stejném prostoru procesu jako jejich klientům a každá instance aplikace Excel vždy má vlastní instanci serveru VTR.

Další informace

Kroky pro reprodukci problému

  1. V jazyce Visual Basic, vytvořte nové ActiveX EXE projektu.
  2. V nabídce projekt klepněte na odkazy.
  3. Vyberte Objektové knihovny Microsoft Excel 2002 a potom klepněte na tlačítko OK.
  4. V nabídce projekt klepněte na příkaz Vlastnosti Project1.
  5. Změnit na "RTDExe" název projektu a klepněte na tlačítko OK.
  6. Změňte vlastnost název modulu třídy Class1 na "Příklad".
  7. Přidejte následující kód v modulu třídy.
    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. V nabídce projekt vyberte příkaz Přidat modul.
  9. Přidejte následující kód do nového modulu.
    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. V nabídce soubor klepněte na příkaz Vytvořit RTDExe.exe k sestavení komponenty.
  11. V aplikaci Excel vytvořte nový sešit.
  12. Do buňky A1 zadejte následující vzorec:
    =RTD("RTDExe.Example",,"X")
    Funkce vrátí 0.
  13. Po pěti sekundách hodnotu v přírůstcích A1 označíte, že server je oznamování Excel aktualizace.
  14. Spuštění jiné instance aplikace Excel a potom přidejte nový sešit.
  15. Do buňky A1 zadejte následující vzorec:
    =RTD("RTDExe.Example",,"X")
    Funkce vrátí 0.
  16. Hodnota v A1 druhá instance aplikace Excel i nadále aktualizovat. Nikoli hodnota v A1 první instance. Po prezenční signál po uplynutí intervalu (15 sekund je výchozí nastavení), první instance aplikace Excel zobrazí následující chybovou zprávu:
    Data v reálném čase serveru 'rtdexe.example' neodpovídá. Chcete, aby aplikace Microsoft Excel pokusit server restartovat?
    Pokud klepnete na tlačítko Ano, restartování serveru a obdrží první instance aplikace Excel aktualizaci oznámení ze serveru. Však po restartování serveru, druhá instance aplikace Excel potom generuje stejnou zprávu poté, co byl dosažen interval prezenčního signálu.
K odstranění problému, tak, že neobdržíte k této chybě, přepněte do projektu v jazyce Visual Basic, změňte nastavení vlastnosti Instancing třídy PříkladSingleUse a potom znovu sestavit RTD server.

Odkazy

Další informace získáte následujícím článku znalostní báze Microsoft:
285339Jak vytvořit Server RealTimeData pro Excel

Vlastnosti

ID článku: 284883 - Poslední aktualizace: 14. května 2007 - Revize: 3.2
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Visual Basic 6.0 Professional Edition
Klíčová slova: 
kbmt kberrmsg kbpending kbprb KB284883 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:284883

Dejte nám zpětnou vazbu

 

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