Puede recibir este mensaje si el servidor RTD es un EXE de ActiveX se creó para MultiUse creación de instancias, que es un valor predeterminado para proyectos de EXE ActiveX en Visual Basic. Un EXE de ActiveX es MultiUse puede compartirse entre los clientes. Instancias independientes de Excel no pueden compartir servidores RTD. Cuando Excel inicia un servidor RTD, Excel llama al método ServerStart de servidor RTD y, a continuación, lo pasa una referencia al objeto CallBack para esa instancia de Excel. Por lo tanto, si dos instancias de Excel intentan compartir el mismo servidor RTD, la segunda instancia reemplaza el objeto CallBack para la primera instancia. Este comportamiento invalida el objeto CallBack para la primera instancia.
Utilice la creación de instancias SingleUse para componentes de ActiveX EXE que actuarán como servidores RTD para Excel. Al generar componentes ActiveX EXE como SingleUse, cada instancia de Excel tiene su propia instancia de la RTD servidor.
Otra solución es utilizar una DLL de ActiveX para el servidor RTD en lugar de un archivo EXE de ActiveX. Carga de DLL ActiveX en el mismo espacio de proceso que sus clientes y cada instancia de Excel siempre tiene su propia instancia del servidor RTD.
En Visual Basic, cree un EXE de ActiveX nuevo proyecto.
En el menú proyecto , haga clic en referencias .
Seleccione la Biblioteca de objetos de Microsoft Excel 2002 y, a continuación, haga clic en Aceptar .
En el menú proyecto , haga clic en Propiedades de Project1 .
Cambie el nombre del proyecto a "RTDExe" y, a continuación, haga clic en Aceptar .
Cambie la propiedad nombre del módulo de clase Class1 a "Ejemplo".
Agregue el código siguiente al módulo de clase.
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
En el menú proyecto , seleccione Agregar módulo .
Agregue el código siguiente al nuevo módulo.
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
En el menú archivo , haga clic en Crear RTDExe.exe para crear el componente.
En Excel, crear un nuevo libro.
En la celda A1, escriba la fórmula siguiente:
=RTD("RTDExe.Example",,"X")
La función devuelve 0.
Después de cinco segundos, el valor en incrementos de A1 para indicar que el servidor es notificar a Excel de las actualizaciones.
Inicie otra instancia de Excel y, a continuación, agregue un nuevo libro.
En la celda A1, escriba la fórmula siguiente:
=RTD("RTDExe.Example",,"X")
La función devuelve 0.
El valor de A1 de la segunda instancia de Excel continuará actualizándose. Pero no el valor de A1 de la primera instancia. Tras el latido ha transcurrido el intervalo (15 segundos es el valor predeterminado), la primera instancia de Excel muestra el mensaje de error siguientes:
El servidor de datos en tiempo real 'rtdexe.example' no responde. ¿Desea que Microsoft Excel intente reiniciar el servidor?
Si hace clic en Sí , se reiniciará el servidor y la primera instancia de Excel recibe actualización notificaciones desde el servidor. Sin embargo, después de reiniciar el servidor, la segunda instancia de Excel, a continuación, genera el mismo mensaje ha sido alcanza el intervalo de latidos.
Para corregir el problema, de modo que no reciban este error, cambie al proyecto en Visual Basic, cambie la propiedad Instancing de la clase example a SingleUse y, a continuación, reconstruya el servidor RTD.
Id. de artículo: 284883 - Última revisión: lunes, 14 de mayo de 2007 - Versión: 3.2
La información de este artículo se refiere a:
Microsoft Office Excel 2007
Microsoft Office Excel 2003
Microsoft Excel 2002 Standard Edition
Microsoft Visual Basic 6.0 Professional Edition
Palabras clave:
kbmt kberrmsg kbpending kbprb KB284883 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 284883
¡Muchas gracias! Sus comentarios nos ayudarán a mejorar los contenidos de soporte. Para más opciones de asistencia, visite la página de Ayuda y soporte técnico.