Server RTD non invia le notifiche di aggiornamento a pi¨ istanze di Excel

Traduzione articoli Traduzione articoli
Identificativo articolo: 284883 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

Quando si utilizzano pi¨ istanze di Microsoft Office Excel con il server RealTimeData (RTD), si potrebbe essere visualizzato il messaggio seguente:
Il server di dati in tempo reale 'servername.classname' non risponde. Si desidera tentare di riavviare il server di Microsoft Excel?
Di conseguenza, il server di DATITEMPOREALE Ŕ Impossibile inviare le notifiche di aggiornamento a pi¨ istanze di Excel.

Cause

Puoi ricevere questo messaggio se il server RTD Ŕ un eseguibile ActiveX creato per multiuso istanze, ovvero l'impostazione predefinita per i progetti EXE ActiveX in Visual Basic. Un file EXE ActiveX che Ŕ multiuso possono essere condivise tra i client. Istanze separate di Excel non possono condividere server RTD. Quando si avvia un server RTD per Excel, Excel chiama il metodo server RTD ServerStart e quindi passa un riferimento all'oggetto CallBack per l'istanza di Excel. Di conseguenza, se due istanze di Excel tentano di condividere lo stesso server RTD, la funzione della seconda istanza sostituisce l'oggetto CallBack per la prima istanza. Questo comportamento invalida l'oggetto di CallBack per la prima istanza.

Risoluzione

Utilizzare SingleUse istanze per componenti di EXE ActiveX che fungerÓ da server RTD per Excel. Quando si genera EXE ActiveX componenti come SingleUse, ciascuna istanza di Excel dispone di una propria istanza di RTD il server.

Un'altra soluzione consiste nell'utilizzare una DLL ActiveX per il server RTD invece di un file EXE ActiveX. DLL ActiveX caricate nello stesso spazio processo come i client e ogni istanza di Excel include sempre la propria istanza del server RTD.

Informazioni

Procedura per riprodurre il problema

  1. In Visual Basic, creare un EXE ActiveX nuovo progetto.
  2. Scegliere riferimenti dal menu progetto .
  3. Selezionare la Libreria di oggetti di Microsoft Excel 2002 e quindi fare clic su OK .
  4. Dal menu progetto , scegliere ProprietÓ Progetto1 .
  5. Modificare il nome del progetto per "RTDExe" e quindi fare clic su OK .
  6. Modificare la proprietÓ di nome del modulo di classe Class1 in "Esempio".
  7. Aggiungere il seguente codice al modulo di classe.
    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. Nel menu progetto , selezionare Aggiungi modulo .
  9. Aggiungere il codice riportato di seguito al nuovo modulo.
    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. Nel menu file , fare clic su Crea RTDExe.exe per creare il componente.
  11. In Excel, creare una nuova cartella di lavoro.
  12. Nella cella A1 digitare la formula seguente:
    =RTD("RTDExe.Example",,"X")
    La funzione restituisce 0.
  13. Dopo cinque secondi, il valore in incrementi di A1 per indicare che il server Ŕ notifica Excel degli aggiornamenti.
  14. Avviare un'altra istanza di Excel e quindi aggiungere una nuova cartella di lavoro.
  15. Nella cella A1 digitare la formula seguente:
    =RTD("RTDExe.Example",,"X")
    La funzione restituisce 0.
  16. Il valore di A1 della seconda istanza di Excel continuerÓ a essere aggiornato. Ma non il valore di A1 della prima istanza. Dopo l'heartbeat Ŕ trascorso l'intervallo (15 secondi Ŕ il valore predefinito), la prima istanza di Excel viene visualizzato il seguente messaggio di errore:
    Il server di dati in tempo reale 'rtdexe.example' non risponde. Si desidera tentare di riavviare il server di Microsoft Excel?
    Se si sceglie , il riavvio del server, e la prima istanza di Excel riceve un aggiornamento notifica dal server di. Tuttavia, dopo il riavvio del server, la seconda istanza di Excel genera quindi lo stesso messaggio raggiunto l'intervallo di heartbeat.
Per risolvere il problema in modo da non ricevere questo errore, passare al progetto in Visual Basic, impostare la proprietÓ di Instancing della classe example su SingleUse e quindi rigenerare il server RTD.

Riferimenti

Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
285339Come creare un Server RealTimeData per Excel

ProprietÓ

Identificativo articolo: 284883 - Ultima modifica: lunedý 14 maggio 2007 - Revisione: 3.2
Le informazioni in questo articolo si applicano a:
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Visual Basic 6.0 Professional Edition
Chiavi:á
kbmt kberrmsg kbpending kbprb KB284883 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 284883
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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