ДРВ сервер не отправляет уведомления об обновлениях для нескольких экземпляров Microsoft Excel

Переводы статьи Переводы статьи
Код статьи: 284883 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Проблема

При использовании нескольких экземпляров Microsoft Office Excel вместе с вашей Сервер RealTimeData (ДРВ) может появиться следующее сообщение:
Сервер данных реального времени «servername.classname» не является отвечать на запросы. Хотите, чтобы Microsoft Excel, чтобы попытаться перезапустить сервер?
Таким образом сервер ДРВ не отправляет уведомления об обновлениях для нескольких экземпляров Microsoft Excel.

Причина

Это сообщение может появиться, если ваш сервер ДРВ ActiveX EXE, построенная для экземпляров MultiUse, который является настройкой по умолчанию для проектов Visual Basic ActiveX EXE. Можно ActiveX EXE-файла, зависит от типа для использования несколькими клиентами. Отдельные экземпляры Excel не могут совместно использовать серверы ДРВ. При запуске сервера ДРВ Excel, Excel вызывает сервер ДРВ ServerStart метод и затем передает ссылку на Ответный вызов Объект, экземпляр Excel. Таким образом Если два экземпляра Microsoft Excel пытается совместно используют один и тот же сервер ДРВ, заменяет второго экземпляра Ответный вызов Объект, для первого экземпляра. Такое поведение делает недействительными Ответный вызов Объект, для первого экземпляра.

Решение

Используйте SingleUse создание экземпляров компонентов ActiveX EXE, будет действовать как серверы ДРВ для Excel. При построении ActiveX EXE компоненты как SingleUse, каждый экземпляр Excel имеет свой собственный экземпляр ДРВ сервер.

Другим решением является использование ActiveX DLL сервера ДРВ вместо ActiveX EXE. Загрузить DLL-библиотеки ActiveX в том же пространстве процесса как своим клиентам и каждый экземпляр Excel всегда имеет его собственный экземпляр сервера ДРВ.

Дополнительная информация

Действия по воспроизведению проблемы

  1. В Visual Basic создайте новые ActiveX EXE проект.
  2. На Проект меню, нажмите кнопку Ссылки.
  3. Выберите Библиотека объектов Microsoft Excel 2002, а затем нажмите кнопку ОК.
  4. На Проект меню, нажмите кнопку Свойства Project1.
  5. Измените имя проекта «rtdexe» и нажмите кнопку ОК.
  6. Изменение Имя свойства элемента Class1 модуль класса «Example».
  7. Добавить Следующий код в модуль класса.
    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. На Проект Выберите пункт Добавить модуль.
  9. Добавьте следующий код в новый модуль.
    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. На Файл меню, нажмите кнопку Сделать RTDExe.exe для создания компонента.
  11. В Microsoft Excel создайте новую книгу.
  12. В ячейке A1 введите следующую формулу:
    =RTD("RTDExe.example",,"X")
    Функция возвращает 0.
  13. Через пять секунд, значение A1 шагом для обозначения что сервер уведомляет Excel обновлений.
  14. Запустить другой экземпляр Microsoft Excel, а затем добавьте новый книги.
  15. В ячейке A1 введите следующую формулу:
    =RTD("RTDExe.example",,"X")
    Функция возвращает 0.
  16. Продолжается значение A1 второй экземпляр Excel для обновления. Но не поддерживает значение A1 первого экземпляра. После истек интервал подтверждения (15 секунд по умолчанию), первый экземпляр из Microsoft Excel отображается следующее сообщение об ошибке:
    В сервер данных реального времени «rtdexe.example» не отвечает. Хотите ли вы Microsoft Excel, чтобы попытаться перезапустить сервер?
    При нажатии кнопки Да, перезагрузки сервера и получает первый экземпляр Excel Обновите уведомления от сервера. Однако после перезагрузки сервера, второй экземпляр Excel создает то же сообщение после интервал подтверждения соединения уже достигнуто.
Чтобы устранить проблему таким образом, чтобы эта ошибка не появляется Переключитесь в проект в Visual Basic, изменение Создание экземпляров свойства элемента Пример класс SingleUseи затем перестройте ДРВ сервера.

Ссылки

Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
285339Как создать RealTimeData сервер для Excel

Свойства

Код статьи: 284883 - Последний отзыв: 5 июня 2011 г. - Revision: 5.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Office Excel 2007
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Visual Basic 6.0 Professional Edition
Ключевые слова: 
kberrmsg kbpending kbprb kbmt KB284883 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:284883

Отправить отзыв

 

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